C语言 s=fun(n-1)+2 我想知道 这句是什么意思 如果n=3 s=fun(2)+2 这句表示了什么

int fun(int n)
{
int c;
if (n==1)
c=10;
else
c=fun(n-1)+2;(为什么会是14呢)
return c;
}
main()
{
int a;
printf("\nPlease enter n:");
scanf("%d", &a);
printf("The result:%d\n\n", fun(a));
}我输入3,为什么结果是14 求分析

s = fun( n-2 ) + 2; 表示将函数fun的返回值 + 2赋给s。函数fun的形参是 n - 2。那这样n=3 s=fun(2)+2 即好理解了。具体s是多少要看函数是怎样实现的了(看函数体内容)追问

上面的程序为什么会等于14

追答

你的fun函数实际上是一个递归调用的函数,下面我们来分析一下函数:
我们可以容易的看到当fun函数的形参为 1 时,函数返回 c ,而且我们知道此时c的值是10
假如现在执行语句 : s=fun(3)+2;
首先函数的形参值是3,3明显不等于1,因此函数调用fun( n - 1 ) ,,但是此时 c 的值我们好不知道,但是新调用的fun函数的形参是 2 ,当然2也不等于1,继续调用函数fun,直到某一个fun函数的形参为 1 时,我们找到一个c的值是10。这层函数就结束了,但是形参是 2 的fun函数此时未结束,进行了c = fun( 1 ) + 2;的操作,那么此时 c 等于12。fun( 1 )返回值就是12,同理,那么fun( 2 )最后返回值就是14了。
建议楼主看看有关递归调用的资料,一便更好理解

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-11
这个是c语言中比较经典的函数递归调用,就是函数调用了他本身,s=fun(n-1)+2是指本次调用的该函数的参数是在上一次函数运行结果,计算的时候不能从n=3开始,必须从初始条件开始迭代。
你说的n=3,s=fun(2)+2应该理解为,f(3)=f(2)+2即第三次运行结果应该是第二次运行结果+2,二第二次应该是第一次加2,由于当n=1是,f(n)=10,故f(1)=10,f(2)=f(1)+2=12,f(3)=f(2)+2=14.不知看清楚没有。
第2个回答  2012-06-11
fun(n)这个是个函数的
s=fun(n-1)+2
fun(n-1) 就是把 n-1 作为参数进行fun内部的运算
n=3 s=fun(2)+2
就是把 2 作为参数进行fun内部的运算

最后把fun的返回值 + 2赋给s追问

上面的程序为什么会等于14

本回答被网友采纳
第3个回答  2012-06-11
这个是递归:
要求出f(3),必须求出f(2),要求出f(2)就必须求出f(1),而f(1)是已知的,最后从f(1)再倒着算回去:
f(3)=f(2)+2=(f(1)+2)+2=10+2+2==14
第4个回答  2012-06-11
fun()是某个函数,返回某个值,比如fun(n){n=n+1;}
那fun(2)就等于3,s=3+2=5追问

上面的程序为什么会等于14

追答

具体楼上说的差不多了
简单的说就是 fun函数执行了三次,前两次每次都+2.所以结果是14,如果fun(4),应该是16

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网