菜鸟提问:C语言函数递归调用的问题(二级级别的)

来源:百度知道 编辑:UC知道 时间:2024/06/11 06:09:13
#include<stdio.h>
int fun(int n,int *s)
{ int f1,f2;
if(n==1||n==2) *s=1;
else { fun(n-1,&f1);fun(n-2,&f2);*s=f1+f2;}
}
main()
{ int x;
fun(6,&x);printf("%d",x);
}
这个程序的结果如何?~该如何分析呢?~最好是自己的见解,小弟先谢过了!

这是求菲薄拉起数列的函数。传递进去的参数是数列下标和存放结果的数。
如果n=1或n=2,那么*s=1,这个称为递归结束条件。
否则,先调用fun,求出f(n-1)和f(n-2),再求s
例如4
f(4,s)
4!=1 4!=2
f(3,f1) f(2,f2)
分别求这两个
f(3,f1):3!=1 3!=2,因此还要调用f
求f(2,ff1) f(1,ff2) => f(3,f1)=2
f(2,f2)=1;
返回最外层 f(4,s)=f(3,f1)+f(2,f2)=2+1=3;

f(6)应该等于8
还有什么问题不明白加我,819567826

*s=1+1