叁er 发表于 2013-12-6 21:14:56

鱼C考场C语言第四章测试题第9题,求解惑


#include <stdio.h>


int fun(int n)

{
int s;

if(n==1||n==2)
{
s = 2;

}

else
{

s = n-fun(n-1);

}

return s;

}

main()

{

printf("%d", fun(3));

}S怎么会是1呢,调试了但不知道为何从return s跳到s = n-fun(n-1);求详细解释


叁er 发表于 2013-12-6 22:00:05

不小心点到已解决了 求指点

helehappy 发表于 2013-12-6 22:29:22

我也是一个新学习c的初学者,这道题我看懂了! 我哦的理解这里说说,
首先执行的是main函数,当printf时,把fun(3)的值送到int fun()函数中,然后if的第一个条件不符合,就执行else,s=n-fun(n-1)这里是关键,呵呵,遇到fun(n-1)的时候,又把fun()送到int fun()函数中,这样,就符合if的第一个条件,也就是s=2,然后回到s=n-fun(n-1)这里,这里的n=3,fun(n-1)=2,运算后就s=1! 哈哈!:lol::lol:

helehappy 发表于 2013-12-6 22:30:39

我感觉这里像是一个循环一样! 要是n-1
是大于2,那就还要跟复杂了!以上纯属个人理解!!!

叁er 发表于 2013-12-6 23:01:20

helehappy 发表于 2013-12-6 22:29 static/image/common/back.gif
我也是一个新学习c的初学者,这道题我看懂了! 我哦的理解这里说说,
首先执行的是main函数,当printf时, ...

先谢谢了,又调试了代码一遍,终于理解了
页: [1]
查看完整版本: 鱼C考场C语言第四章测试题第9题,求解惑