C语言中,这条语句是什么意思?

#include <stdio.h>
void fun(int n , int *s)
{
int f1,f2;
if(n == 1|| n==2 ) *s = 1;
else {
fun(n-1, &f1 );
fun(n-1, &f2 ); //这两条递归整的我头晕我太菜了;我不明白这里怎么执行的!这&f12?
*s = f1 + f2;
}
}main()
{int x; fun(6 , &x) ; printf("%d\n",x);}
拜托大神帮忙解答一下 谢谢!

开始进来
n=6,地址是x,然后调用fun方法,此时n既不等于1也不等于2
所以执行else中的代码
此时fun(n-1,&f1)中n-1=6-1=5,地址是f1,调用fun方法,将5传给void fun(int n,int *s)中的n,把f1传给*s。此时 fun(n-1,&f1)语句执行完。
执行fun(n-1,&f2),因为上一次n已经变成5,此时fun(n-1,&f2)中n-1=5-1=4,地址是f2;继续调用fun方法,将4传void fun(int n,int *s)中的n,把f1传给*s。
按这样的步骤一直执行到n==1或者n==2,此时*s = 1,等于1和等于2分别执行一次,所以就是*s=1+1

整个代码执行完毕后,*s已经经历了好几次加法的过程
*s=5+4+3+2+1+1=16
然后程序回到main主函数中,将*s的值传递给x
执行printf("%d",x)
所以结果是16
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-19
s1 = 1
s2 = 1
以上是初始化条件
s3 = s2 + s2 = 2 * s2
s4 = s3 + s3 = 2 * s3
...
很简单的,s6 = 2 * s5 = 2 * 2 * s4 = 2 * 2 * 2 * s3 = 2 *2*2*2*s2 = 16
关键要看清如下这两个式子是一样的,并没有什么区别。
fun(n - 1, &f1);
fun(n - 1, &f2);
&表示我不需要返回值了,你直接把结果存到我传递过去的变量里就行了,换汤不换药
相似回答