我理解"一个"解决方案是:
function Factorial(number)
{
if(number == 0 || number == 1){
return 1;
}
return number * Factorial(number -1);
}
Run Code Online (Sandbox Code Playgroud)
我想了解到底发生了什么.当数字== 1时,我理解最后一部分的内容.
如果我们采取一个简单的例子说3!
我们怎么知道何时停止?事实是我们返回1告诉函数停止吗?
如果是这种情况,为什么当我们第一次返回3*Factorial(2)时函数不会停止?是因为它返回一个函数,所以它必须继续,直到它不再返回一个函数?
谢谢
我认为你必须理解阶乘的逻辑.
因此,因子只是产品,用感叹号表示,即如果你写的话
0! = 1
1! = 1
2! = 2*1
3! = 3*2*1
4! = 4*3*2*1
5! = 5*4*3*2*1
Run Code Online (Sandbox Code Playgroud)
希望您找到该模式,因此您可以将上述因子写为:
0! = 1
1! = 1
2! = 2*1!
3! = 3*2!
4! = 4*3!
5! = 5*4!
Run Code Online (Sandbox Code Playgroud)
所以在你的函数中你使用的是类似的逻辑.
现在在你的功能
if(number == 0 || number == 1)
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
上面的逻辑是覆盖前两种情况,即0!和1!和
return number * Factorial(number -1);
Run Code Online (Sandbox Code Playgroud)
是剩下的数字.
所以你正在使用解决阶乘问题的递归技术.
要理解递归,让我们取一个数字说5即,我们要找到5的值!
然后首先你的功能将检查
if(number == 0 || number == 1)
Run Code Online (Sandbox Code Playgroud)
不满意,然后它移动到下一行,即,
return number * Factorial(number -1);
Run Code Online (Sandbox Code Playgroud)
这使
5*Factorial(5-1) which is equal to 5*Factorial(4)
Run Code Online (Sandbox Code Playgroud)
现在,在对Factorial函数的后续调用中,它将返回如下值:
5*(4*Factorial(4-1)) which is equal to 5*(4*Factorial(3))
5*(4*(3*Factorial(3-1)) which is equal to 5*(4*(3*Factorial(2)))
5*(4*(3*(2*Factorial(2-1)))) which is equal to 5*(4*(3*(2*Factorial(1))))
Run Code Online (Sandbox Code Playgroud)
现在当它返回factorial(1)然后你的条件
if(number == 0 || number == 1)
Run Code Online (Sandbox Code Playgroud)
很满意,因此你得到的结果如下:
5*4*3*2*1 = 120
Run Code Online (Sandbox Code Playgroud)
在旁注:
请注意,factrial仅用于正整数.
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |