我有一个用户定义的函数,它返回输入数字的阶乘。 这是功能:
int factorial_calc(int m1)
{
if(m1==1)
{
return 1;
}else
return m1*factorial_calc(m1-1);
}
现在该程序正常运行,程序似乎没有任何问题。
我在这里要求的是,有人可以解释代码如何计算阶乘并为我们提供输出吗?
感谢您的帮助! -Sayan。 编辑:对不起,我很急,我没有检查我输入的内容。我现在纠正了。现在两者都是factorial_calc。
Double EDIT:我真正想知道的不是递归。我知道当代码工作时(例如:让m1 = 5)然后它需要5并将它存储在main()中的变量中。然后一遍又一遍地直到达到0.我想知道的是它是如何知道每个值都会成倍增加的? 我们只在变量中存储值,而不是数学运算符。那么,我错过了什么?
答案 0 :(得分:1)
递归:简化问题,解决更简单的问题
示例:从N
到1
的所有数字的乘法
1 * 2 * 3 * 4 * 5 * 6 * ... * N
简化:从N
到1
的所有数字的乘法是 N
乘以N - 1
到1的所有数字的乘法比例子简单
N * 1 * 2 * 3 * 4 * 5 * 6 * ... *(N-1)
factorial(N) = N * factorial(N - 1)
但代码中最简单的情况
if (N == 1) return 1;
将这些陈述放在一个函数中,你就有了解决方案。