作业帮 > 综合 > 作业

#includelong fun(int n){if(n>1)return (n*fun(n-1));return 1;

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/05 13:59:19
#include
long fun(int n)
{
if(n>1)
return (n*fun(n-1));
return 1;
}
main()
{
printf("10!=%1d\n",fun(10));
}
这里的return
能纤细的说下么.
如果求的是10!
n>1,什么时候结束叠乘?
如果按一楼,是不是就是相当于else return
if(n>1)
return (n*fun(n-1));
是一个 if 语句.很明显,如果 n 大于 1,则 执行 return (n*fun(n-1)); 否则就执行下面的语句.
因为 main 函数里调用的是 fun(10); 所以对于 fun 函数,入口参数 n 等于10;10 大于 1,所以执行 return (n*fun(n-1)); 又调用了 fun(9).
就这样一直调用到 fun(1); 此时 n > 1 不成立,所以不执行
return (n*fun(n-1));
而是执行下一句 return 1; 这样就返回到上一层 fun(2) 的return语句处,即
return ( 2 * fun( 1 ) ); fun(2) 继续向上返回,直到 fun(10);

多一句嘴,从代码风格看,我猜你大概看的是谭浩强的书吧.老谭的书过时了,内容已经非常陈旧了.劝你不要看了.
main() 这种形式过时了,现在应该写成
int main(void)
{
return 0;
}
这种形式.
而且main 函数之前还要写 函数原型.
推荐你用 C Primer Plus 入门,网上有中文版pdf.你可以和谭浩强的书对照着看,看看哪本书好.我认为比老谭的书强多了.