|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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]
|
|