各位,请帮我看下,这段程序输出的结果是多少
#include<stdio.h>int foo(int n){
int i;
if(n<3)
return 1;
for(i=0;i<n;i++){
printf("%d\n",foo(n-1)+foo(n-2));
returnfoo(n-1)+foo(n-2);
}
}
int main(){
printf("foo;%d\n",foo(4));
return 0;
} 2
3
2
foo;3
http://codepad.org/ooNKYPCv 没看lz是什么程序... albert_w 发表于 2013-7-22 19:23 static/image/common/back.gif
2
3
2
请问下,在for循环时候,循环几次,怎么会出来三个数字,就是在这想不明白 foo 4的时候
printf("%d\n",foo(n-1)+foo(n-2));
打印前call 了foo 3,这里的foo(n-1)触发一次打印, 也就是2, 然后这行打印出3, 然后下面return这一行, 再次call到foo(n-1),再打印一个2出来. albert_w 发表于 2013-7-23 12:07 static/image/common/back.gif
foo 4的时候
printf("%d\n",foo(n-1)+foo(n-2));
打印前call 了foo 3,这里的foo(n-1)触发一次打印, 也就 ...
如果我输入为5时候,printf("%d\n",foo(n-1)+foo(n-2));中的foo(n-1)和foo(n-2),他们怎么调用,是同时调用,还是一个一个的调用 大自然 发表于 2013-7-23 18:44 static/image/common/back.gif
如果我输入为5时候,printf("%d\n",foo(n-1)+foo(n-2));中的foo(n-1)和foo(n-2),他们怎么调用,是同 ...
肯定一个一个调用, 至于先左还是先右, 这个就不好说了, 和编译器实现有关系,也就是入栈顺序 albert_w 发表于 2013-7-23 18:55 static/image/common/back.gif
肯定一个一个调用, 至于先左还是先右, 这个就不好说了, 和编译器实现有关系,也就是入栈顺序 ...
将数据换为5的话,返回的结果为232252322,按照推理的话我在这怎么推理,都是2325232 。少了最后一个2 。大侠,帮助分析下呗,感激 #include<stdio.h>
int foo(int n){
int i;
if(n<3) {
printf("foo(%d):1\n", n);
return 1;
}
for(i=0;i<n;i++){
printf("foo(%d):%d\n",n, foo(n-1)+foo(n-2));
returnfoo(n-1)+foo(n-2);
}
}
int main(){
printf("===%d===\n",foo(5));
return 0;
}
不解释, run这段程序, 得这个结果
foo(2):1
foo(1):1
foo(3):2
foo(2):1
foo(1):1
foo(2):1
foo(4):3
foo(2):1
foo(1):1
foo(3):2
foo(2):1
foo(1):1
foo(2):1
foo(2):1
foo(1):1
foo(3):2
foo(2):1
foo(1):1
foo(5):5
foo(2):1
foo(1):1
foo(3):2
foo(2):1
foo(1):1
foo(2):1
foo(4):3
foo(2):1
foo(1):1
foo(3):2
foo(2):1
foo(1):1
foo(2):1
foo(2):1
foo(1):1
foo(3):2
foo(2):1
foo(1):1
===5===
掐掉foo(1) 和foo(2)就是你要的了
232是f(4)的打印, f5=f4+f3,那么f3还有一次打印也就是那个2的来源. 不能说f4包含了f3,就吃掉f4+f3加号后的f3 程序写的很乱, for 语句return了.
递归完了再递归.
别杀脑细胞了, 把程序写成这样多好:
if(n<3) {
printf("foo(%d):1\n", n);
return 1;
}
else {
i= foo(n-1) + foo(n-2);
printf("foo(%d):%d\n", n, i);
return i;
} c语言的递归调用啊,本来就非常难以理解啊,建议想先看看c语言关于 递归的调用
页:
[1]