简单的递归问题

时间:2011-06-13 08:31:55

标签: c recursion factorial

此代码给出了给定数字的计算阶乘的每个步骤结果,但我只想要最终的。

#include <stdio.h>

long int factorial(int n) {
  if (n <= 1)
    return(1);
  else
    n = n * factorial(n - 1);
  printf("%d\n", n);
  return(n);
}

main() {
  int n;
  printf("Enter n: ");
  scanf("%d", &n);

  //function call
  factorial(n);
  return 0;
}

6 个答案:

答案 0 :(得分:5)

这个怎么样?

int final;

final = factorial(n);
printf("%d! = %d\n", n, final);

并停止在printf功能中使用factorial

答案 1 :(得分:4)

所以不要在递归函数中使用printf,而只在main()内打印返回值。

答案 2 :(得分:2)

避免在递归函数中使用printf();

在递归函数中编写printf();是每次都打印值。所以,只需将它放在函数之外。

像这样:

#include <stdio.h>

long int factorial(int n) {
    if (n<=1)
        return(1);
    else
        n=n*factorial(n-1);
    return(n);
}

main() {
    int n,f;
    printf("Enter n: ");
    scanf("%d",&n);
    //function call
    f = factorial(n);
    printf("Factorial of %d is %d\n",n,f);     // See the change here ....
    return 0;
}

答案 3 :(得分:1)

long int factorial(int n){
     if(n<=1)
        return 1;
     return n*factorial(n-1);
}

答案 4 :(得分:1)

使用此,

long int factorial(int n) {    
    if (n<=1)      
        return(1);  
    else    
        n=n*factorial(n-1);  
    //printf("%d\n",n);    
    return(n);
} 

main(){ 
    int n, result;  
    printf("Enter n: ");  
    scanf("%d",&n);
    //function call  
    result=factorial(n);
    printf("%d\n",result);    

    return 0;
}

答案 5 :(得分:0)

[此答案最初由原始海报编辑成问题,替换了错误的代码。问题已经恢复,解决方案在此社区维基回答中重新发布。]

重新编写代码,现在看起来像这样。感谢您的建议。

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

main()
{
    int n;
    printf("Enter n: ");
    scanf("%d",&n);
    //function call
    final(n);
    return 0;
}