函数的递归调用(求10的阶乘)这道题怎么走的?

来源:百度知道 编辑:UC知道 时间:2024/05/17 18:16:28
#include"stdio.h"
long fun(int n){

if(n>1)
return(n*fun(n-1));

else if(n==1)
return 1;

/* 当n==1时那么返回的不是1吗?这个函数的返回值应该是1才对 */

}

main()
{

int k=10;

printf("%d!=%ld\n",k,fun(k));
}

To LZ:
当n==1时那么返回的不是1吗?这个函数的返回值应该是1才对
假设k==10;
在最后一次当n==1的时候,确实返回了1,但是,在之前的调用中,返回了
fun(10) = 10*fun(9) = 10*9*fun(8) =...= 10*9*8*...*2*fun(1)
最后得到10的阶乘.

To applepath:

warning C4715: 'fun' : not all control paths return a value
并不是所有流程都返回了值.

因为if语句的范围并不影响到fun函数,即使你已经考虑了所有情况,但是编译器认为你的返回值不够.也就是说,需要在最后添加一个并不需要的返回值来去掉这个警告.就像你那样.另外可以:

long fun(int n)
{
if(n>1) return n*fun(n-1);
else if(n==1) return 1;
return 0;
}

另外程序可以这样改.(当然,假设参数n总是合法的.也就是假设n>=0)
long fun(int n){
if(n>1) return n*fun(n-1);
return 1;
}
这样不用每次去else费时间.

我用你的程序调试,1的阶乘确实是1,你问的是什么啊???

但是像你这样写程序老是提示D:\v\b.c(15) : warning C4715: 'fun' : not all control paths return a value

这样写就没有了,为啥我不清楚

#include"stdio.h"
long fun(int n)
{
int c;

if(n>1)
c=(n*fun(n-1));