c - 为什么我的 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;
}
解决方案
函数内
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。
推荐阅读
- mysql - 如何在单个原子操作中将临时表转换为永久表?
- javascript - 我使用 split 和 join 的替换代码仅适用于单个单词输入,而不适用于整个单词
- python - 使用参数化和 xfail 时出现 pytest 错误
- r - 如果我使用 {.tabset},如何在我的 Flexdashboard 中添加另一行?R
- python - 在 Python 中子类化两个类?
- machine-learning - 获取错误作为数据的 DataFrame.dtypes 必须是 int、float、bool 或 categorical
- javascript - Mailchimp Api 无法获取我发送的 email_address 字段
- python - 美丽的汤:从列表中提取文本和网址,但仅在特定标题下
- java - 无法在 Ubuntu 上运行我的 springboot 项目
- javascript - 添加按钮上显示多个div 点击如何通过删除按钮删除同一个div