首页 > 解决方案 > 为什么我的 FirstFactorial 程序即使在不满足条件后仍继续循环回到 while 条件

问题描述

这是代码片段,当使用数字4输出运行时2424242448484848288288288288576576576576。不知道为什么退出函数代码后执行会跳回while循环。任何帮助将不胜感激。先感谢您。

#include <stdio.h>
#include <string.h>

int result = 1;
void FirstFactorial(int);

void FirstFactorial(int num) {
    // code goes here
    while (num > 0) {
        result = result * num;
        num--;
        FirstFactorial(num);
    }
    printf("%d", result);
}

int main(void) {
    int var;
    // keep this function call here
    printf ("Enter your no.\n");
    scanf("%d", &var);
    FirstFactorial(var);
    return 0;
}

标签: cfunctionrecursionwhile-loopfactorial

解决方案


函数内

void
FirstFactorial(int num)
{
  // code goes here
  while(num > 0)
    {
      result = result * num;
      num--;
      FirstFactorial(num);
    }
  printf("%d", result);
}

它的每次迭代都会调用自己的num时间,并且所有迭代一起输出全局变量结果。

因此,例如在函数的第一次调用中,函数在 while 循环中调用自身以获取值范围 [num, 1]。

删除 while 循环,不要使用全局变量。

这是一个演示程序。

#include <stdio.h>

unsigned long long int factorial( unsigned long long int n )
{
    return n < 2 ? 1 : n * factorial( n - 1 );
}

int main(void) 
{
    printf( "%llu! = %llu\n", 4llu, factorial( 4 ) );
    printf( "%llu! = %llu\n", 20llu, factorial( 20 ) );

    return 0;
}

程序输出为

4! = 24
20! = 2432902008176640000

请注意,您可以指定的最大值为 20。


推荐阅读