1

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

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

6 回答 6

5

这个怎么样 ?

int final;

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

并停止printffactorial函数中使用。

于 2011-06-13T08:33:43.287 回答
4

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

于 2011-06-13T08:33:23.367 回答
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;
}
于 2011-06-13T08:34:08.833 回答
1
long int factorial(int n){
     if(n<=1)
        return 1;
     return n*factorial(n-1);
}
于 2011-06-13T08:39:12.053 回答
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;
}
于 2011-06-13T08:39:46.243 回答
0

[此答案最初由原始发布者编辑为问题,替换了错误的代码。该问题已恢复,并且在此社区 wiki 答案中重新发布了解决方案。]


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

#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;
}
于 2016-07-23T19:38:15.227 回答