|  | 
 
| 
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  复制代码#include <stdio.h>
#include <stdlib.h>
int x = 10;
void dofun();
int main(void){
        dofun(x);
        system("pause");
        return 0;
}
void dofun(int x){
        x--;
        if (x < 0) return;
        printf("%d\n", x);
        dofun(x);
        x++;
        printf("%d\n", x);
}
為什麼打印出來是
 
 复制代码9
8
7
6
5
4
3
2
1
0
1
2
3
4
5
6
7
8
9
10
而不是
 
 复制代码9
8
7
6
5
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9
呢?
 在遞迴函數中,出現return的時候,x的值不是-1嗎?
 從-1,x++開始,不是應該從0開始後半段的打印??
 
[b] 因为形参变量属于局部变量,你将 x 传入 dofun 函数时是为内部的局部变量 x 赋值
 
 所以递归过程中对内部的 x 进行自增,自减都是对函数内局部变量 x 进行操作的
 
 所以也就导致你 if 返回前 x = -1,而返回之后是回到了上一层的递归层,x 也还是为进入递归前 x 值
 
 因为进入最后一层递归前,x 的值为 0,虽然在最后层递归中return 前 x = -1,但不影响递归进入前的 x 数值,即还是为 0
 
 想像你那样输出参考以下代码:
 
 
 复制代码#include <stdio.h>
#include <stdlib.h>
int x = 10;
void dofun();
int main(void) {
    dofun(x);
    system("pause");
    return 0;
}
void dofun(int x) {
    x--;
    if (x < 0) return;
    printf("%d\n", x);
    dofun(x);
    printf("%d\n", x);
    x++;
}
 [/b] | 
 |