claysystem
r4bbit
2015-11-09 23:42
采纳率: 39.6%
浏览 2.3k

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条回答 默认 最新

  • CSDNXIAOS
    Robot-S 2015-11-09 23:47

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

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

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

    点赞 评论
  • havedream_one
    havedream_one 2015-11-09 23:59

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

    点赞 评论
  • qq_27183003
    ysuwood 2015-11-10 00:51
      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,依次返回。
    
    
    点赞 评论
  • qq_27183003
    ysuwood 2015-11-10 00:52
      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,依次返回。
    
    点赞 评论
  • chongzi_sheshou
    chongzi_sheshou 2015-11-10 01:05

    #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;
    

    }

    点赞 评论
  • baishileily
    baishileily 2015-11-10 02:29

    第一次调用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会返回给你的主函数,然后输出打印,说的有点啰嗦不知道你能不能看懂

    点赞 评论
  • tsroad
    Tsroad 2015-11-10 02:36

    #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;
    }

    结果展示如下:
    图片说明

    点赞 评论
  • lianshaohua
    ztenv 2015-11-10 03:06

    关键要理解递归的含义,

    点赞 评论
  • u014116643
    mifit 2015-11-10 06:09

    比如输入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;

    点赞 评论

相关推荐