C语言递归函数C语言递归函数C语言递归函数
 #include<stdio.h>
#include<stdlib.h>
//用递归函数来计算N的阶乘
double factorial(int n)
{
    double result;
    if(n<0)
    {
        printf("输入错误\n"); 
    } 
    else if(n==1 ||n==0)
    {
        result=1;
    } 
    else 
    {
        result=factorial(n-1)*n; //n=5 5-1=4 4*5=20   接下来该怎么算呢 麻烦前辈指点一下! 
    } 
    return result;
} 

int main ()
{
    double n ;
    scanf("%lf",&n); 
    printf("%lf的阶乘=%g\n",n,factorial(n)); 
    printf("%lf的阶乘=%lf\n",n,factorial(n)); 
    return 0;
} 

9个回答

#include
#include
//用递归函数来计算N的阶乘
double factorial(int n)
{

//-------------------------------------------------------------
// double result;
// 每次需要记录 result 设置局部静态变量可以达到递归的目的
//-------------------------------------------------------------

static double result;
if(n<0)
{
    printf("输入错误\n"); 
} 
else if(n==1 ||n==0)
{
    result=1;
} 
else 
{
    result=factorial(n-1)*n; //n=5 5-1=4 4*5=20   接下来该怎么算呢 麻烦前辈指点一下! 
} 
return result;

}

int main ()
{
double n ;
scanf("%lf",&n);
printf("%lf的阶乘=%g\n",n,factorial(n));
printf("%lf的阶乘=%lf\n",n,factorial(n));
return 0;
}

结果展示如下:
图片说明

就这就结束了啊,你运行程序了没有?result=factorial(n-1)*n,factorial(n-1)会返回(n-1)!,这样factorial(n-1)*n就是n!,最后返回result

claysystem
r4bbit 运行了,自己试试数字 没试出来
4 年多之前 回复
  result=factorial(n-1)*n; //n=5 5-1=4 4*5=20   接下来该怎么算呢 麻烦前辈指点一下!
    不是4*5啊,是 result=factorial(4)*5;
    会接着调用factorial(4),factorial(3),factorial(2),直到factorial(2),才有返回1,依次返回。

1.在不用递归的情况下,求b的n次方

2.用递归函数求b的n次方

递归的2个条件:
1.函数自己调用自己
2.必须有个明确的返回值......
答案就在这里:IOS开发---C语言-㉔递归函数
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

  result=factorial(n-1)*n; //n=5 5-1=4 4*5=20   接下来该怎么算呢 麻烦前辈指点一下!
    不是4*5啊,是 result=factorial(4)*5;
    会接着调用factorial(4),factorial(3),factorial(2),直到factorial(1),才有返回1,依次返回。

#include
#include
//用递归函数来计算N的阶乘
double factorial(int n)
{
double result;
if(n<0)
{
printf("输入错误\n");
}
else if(n==1 ||n==0)
{
result = 1;
}

else 
{
    result=factorial(n-1)*n; //n=5 5-1=4 4*5=20   接下来该怎么算呢 麻烦前辈指点一下! 
 } 



return result;

}

int main ()
{
double n ;
scanf("%lf", &n);

printf("%f的阶乘=%f\n", n, factorial(n) ); 

printf("%f的阶乘=%f\n", n, factorial(n) ); 

return 0;

}

chongzi_sheshou
chongzi_sheshou 自己看看函数的调用,控制权,返回语句 的功能就能懂了!
4 年多之前 回复

第一次调用factorial(n)的时候,系统需要将参数 n 和局部变量 result 存入栈中,当执行到 factorial( n-1 )*n的时候系统会把factorial(n-1)的参数 n - 1
和factorial(n - 1) 里面的局部变量result再次存入栈中,也就是说并不会先去执行factorial( n-1 ) * n 这个乘法运算,而是先去计算factorial( n-1 )的值,
同样当执行到factorial( n-1 )的时候,它调用的函数为factorial( n-1 ),此时传入的参数已经不是最初的 n 了,而成了 n - 1 ,而对于函数传参来说它的参数
n 并没有变,不过factorial( )函数每一次传进去的值都在变化,最初为 n = 5 , 则 factorial( 5) 中的 factorial( n-1 )*n,就是factorial( 4)* 5 ,这个时候会
调用factorial( 4 ) ,同样factorial( 4)中的factorial( n-1 ) * n 实际上是factorial( 3) * 4,以此下去直到factorial( 1 ) ,然后系统从栈中取出每一个函数局部变量的result值然后返回回去,想当于将 factorial( 1 )的result返回给factorial( 2) , 然后factorial( 2)*执行factorial( 1 ) * 2 ,计算出factorial( 2)中德result然后返回给factorial( 3),直到返回到factorial( 5 ),factorial( 5 )计算的result会返回给你的主函数,然后输出打印,说的有点啰嗦不知道你能不能看懂

关键要理解递归的含义,

比如输入5
factorial(5)
第一次嵌套 返回 5*factorial(4)
第二次嵌套 factorial(4)返回 4* factorial(3),加上第一次的5,就变成5*4* factorial(3);
第三次嵌套factorial(3)返回3* factorial(2),加上前面的,就变成5*4* 3*factorial(2)
依次类推....最后到5*4*3*2* factorial(1)。
factorial(1)返回1,所有结果就变成5*4*3*2*1;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问