C语言上机题

来源:百度知道 编辑:UC知道 时间:2024/05/11 16:42:12
#include<stdio.h>
long fun(int n)
{
if(____)
return (n*fun(____))
return_____
}
main()
{
printf("10!=%1d\n",fun(10));
}

补充fun函数 fun函数的功能是求n的阶乘

我要的不是答案,请高手帮我讲解一下,越细越好, 还有return在这个函数里的作用是什么?一直不太明白 请指点!!

if(n--)
return(n*fun(n));
后面那个return好像用不着
这是一个函数递归调用的问题。
fun是子函数,主程序执行到fun(10)的时候调用子程序,将实参数值10传递给形参n,在子程序中,fun又被自己调用,一直到n=0时,不再执行。

#include<stdio.h>
long fun(int n)
{
if(n>0)
return (n*fun(n-1))
return 1;
}
main()
{
printf("10!=%1d\n",fun(10));
}

return的作用是程序返回到函数调用处,返回的值就是return后面的值.这是个简单的递归.

if(n!=0) \\当n不等于0时,运行递归函数
return (n*fun(n-1)) ;
return n;\\当n等于1时,返回计算结果
}

这是递归函数 确实不好理解
return 表示该函数停止运行
例如
x=fun();
fun()
{
return a;
}
则相当于x=a;

若n=10
那么 该递归函数可以视为
x=fun(10*fun(9))
=fun(10*fun(9*fun(8)))
=fun(10*9*fun(8*fun(7)))
=……
=10*9*8*…*2*1
到此n-n=0 fun()返回n的值
即位为阶乘答案

答案都不错啊。
但如果这样:
if(n>1)
return (n*fun(--n)) ;
return n;
}
结果会少乘了个最初的n即本题的10
哪位能解释一下?

问题出在:return (n*fun(--