cav丽声凯旋2号:有关C问题

来源:百度文库 编辑:高校问答 时间:2024/05/11 15:18:00
阅读下面程序,则程序的执行结果为 【】 。
#include "stdio.h"
fun(int k,int *p)
{ int a,b;
if(k==1||k==2)
*p=1;
else{ fun(k-1,&a);
fun(k-2,&b);
*p=a+b;
}
}
main()
{ int x;
fun(6,&x);
printf("%d\n",x);
}
可以详细给我解释一下吗??

输出结果是:8
这道题采用了函数的递归调用,我是画图作的,你自己可以按照我说的画一下,二叉树知道吗?这图是二叉树的样子。
第一行是6,6的左下方和右下方分别是5、4,5的左下方和右下方分别是4、3,然后依次类推,只要是大于2的数就在它下面按这种规律画下去,画完之后,看最左下角的一行,应该是2 1,2、1都满足了if(k==1||k==2),因为p是1,所以他们各自的a,b都应该是1,也就是2 1上面的3的p值是1+1=2,以此类推就能推出结果。