C语言二级一题

来源:百度知道 编辑:UC知道 时间:2024/06/24 10:07:11
long fun(int n)
{ long s;
if(n==1||n==2) s=2;
else s=n-fun(n-1);
return s;
}
main()
{ printf("d\n",fun(3))
}
的答案为什么是1,呢?不明。

当执行main中的fun(3)后,函数fun(int n)中的n变为3,
接下来if(n==1||n==2) s=2;不执行,然后执行else s=n-fun(n-1);
这时fun(n-1)实际为fun(3-1),所以再调用fun(int n)函数,因为这回n是2了,所以执行if(n==1||n==2) s=2; 语句,s的值变为2,最后return s;即fun(3-1)返回的结果为2。
所以s=n-fun(n-1); 就成了3-fun(3-1)=3-2=1
最后return回主函数printf出来就是1

fun(3)->n==3->s=3-fun(2)
n=2->fun(2)==2
所以 s=1

从main主函数出发 遇到fun 由于n=3 所以执行 else 再次遇到fun 得到结果实际是3-fun(2)即3-2=1