使用递归的阶乘,但按某种顺序获取值

  • 本文关键字:顺序 获取 递归 阶乘 c
  • 更新时间 :
  • 英文 :


以下代码的输出为 5 以及如何修改代码以通过返回获得实际输出?

#include <stdio.h>
int fact(int ,int ,int);
int main(void)
{
    int a=5;
    int b=a;
    int i=1;
    printf("%d",fact(a,i,b));
}
int fact(int a,int i,int b)
{
   if(i<b)
    {
        a=a*i;
        i++;
        fact(a,i,b);
    }
    return a;
}

实现的签名不允许返回结果。您可以将实现更改为以下内容。

int fact(int a) 
{
    int Result;
    if (0 == a)
        Result = 1;
    else
        Result = a * fact(a-1);
    return Result;
}

您是否忘记从if条件中fact函数中return

void fact(int a,int i,int b) 
{     
if(i<b)    
  {     
    a=a*i;       
    i++;        
    fact(a,i,b);  
    return;                  //<-- Added code
  }     
  printf("%dn",a);
}

考虑堆栈: 1*f(0)=1 | | 4*f(3) 5*f(4) f(5) so,while getting poped from stack: 1*2*3*4*5=120.

#include <stdio.h>
int main()
{
    int a=5;
    int ans=f(a);
    printf("%dn",ans);
    return 0;
}
int f(int n)
{
    if(n==0)
    {
        return 1;
    }
    else
    {
        return (n*f(n-1));
    }
}

我找到了问题的正确答案,在这种情况下,我需要编写两个 return 语句来将值抛给函数。

#include <stdio.h>
int fact(int ,int ,int);
int main(void)
{
    int a=5;
    int b=a;
    int i=1;
    printf("%d",fact(a,i,b));
}
int fact(int a,int i,int b)
{
   if(i<b)
    {
        a=a*i;
        i++;
        fact(a,i,b);
        return;
    }
    return a;
}

最新更新