作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/08/03 19:24:45
C语言 s=fun(n-1)+2 我想知道 如果n=3 s=fun(2)+2 这句表示了什么
int fun(int n)
{
\x05int c;
\x05if (n==1)
\x05\x05c=10;
\x05else
\x05\x05c=fun(n-1)+2;(为什么会是14呢)
\x05return c;
}
main()
{
\x05int a;
\x05printf("\nPlease enter n:");
\x05scanf("%d",&a);
\x05printf("The result:%d\n\n",fun(a));
}我输入3,为什么结果是14 求分析
C语言 s=fun(n-1)+2 我想知道 如果n=3 s=fun(2)+2 这句表示了什么
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了。 建议楼主看看有关递归调用的资料,一便更好理解