有人可以向我解释这个有效吗?

时间:2016-06-23 15:49:04

标签: c recursion

我有一个用户定义的函数,它返回输入数字的阶乘。 这是功能:

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.我想知道的是它是如何知道每个值都会成倍增加的? 我们只在变量中存储值,而不是数学运算符。那么,我错过了什么?

1 个答案:

答案 0 :(得分:1)

递归:简化问题,解决更简单的问题

示例:N1 的所有数字的乘法
1 * 2 * 3 * 4 * 5 * 6 * ... * N

简化:从N1的所有数字的乘法是 N乘以N - 1到1的所有数字的乘法比例子简单 N * 1 * 2 * 3 * 4 * 5 * 6 * ... *(N-1)

伪代码中的

factorial(N) = N * factorial(N - 1)

但代码中最简单的情况

if (N == 1) return 1;

将这些陈述放在一个函数中,你就有了解决方案。