如何解释这个阶乘程序中的递归
How to explain the recursion in this factorial program?
这是js中返回一个数字的阶乘的代码:为什么在下面给出的输出中首先打印'else met' ?N>0,因此应该打印"value is…"。有人能解释一下吗?
function factorial(n) {
if (n>0){
console.log("value is "+n*factorial(n-1));
return n * factorial(n-1);
}
else{
console.log("else met");
return 1;
}
}
console.log(factorial(5));
输出:
else met
value is 1
else met
value is 2
else met
value is 1
else met
value is 6
else met
value is 1
else met
value is 2
else met
value is 1
else met
value is 24
else met
value is 1
else met
value is 2
else met
value is 1
else met
value is 6
else met
value is 1
else met
value is 2
else met
value is 1
else met
value is 120
else met
value is 1
else met
value is 2
else met
value is 1
else met
value is 6
else met
value is 1
else met
value is 2
else met
value is 1
else met
value is 24
else met
value is 1
else met
value is 2
else met
value is 1
else met
value is 6
else met
value is 1
else met
value is 2
else met
value is 1
else met
120
[Finished in 0.3s]
要理解这一点,您应该对递归。无论如何,关于这段代码,递归使用堆栈,
factorial(5)变成了=factorial(4)*5,所以这里插入了factorial(5)进入堆栈,然后调用
factorial(4)=factorial(3)*4,因此factorial(4)被插入到堆栈中然后调用
factorial(3)=factorial(2)*3,现在factorial(3)在堆栈中intun调用
facotrial(2)=factorial(1)*2,现在factorial(2)在堆栈中内弯的电话Factorial (1)= Factorial(0)*1,现在Factorial(1)在返回调用的堆栈中阶乘(0),在这里因为它不>0,会转到else然后先打印else满足条件并显示为"else满足"然后control返回到factorial(1)
现在factorial(1)变成1*1,从堆栈和控制中删除返回阶乘(2)
再次调用factorial(2)调用factorial(1),然后调用factorial(0)所以for factorial(2) print factorial(2)=>factorial(1)*2,Factorial (1)=> Factorial (0)*1 Factorial (0)=> else met并返回1现在control是factorial(1)它显示的值是1对于factorial(2),它将值显示为2
对factorial(3),4和5
继续相同的过程但是递归是最糟糕的处理方法因为它每次都执行多个调用,所以您可以考虑使用这些值。我的意思是factorial(2)调用factorial(1)阶乘(0)阶乘(3)也调用这些并重新计算值,相反,它可以使用现有值尝试使用动态规划方法来解决这个问题。下面是使用动态方法的阶乘代码片段,它要快得多
var fact=new Array(5);
fact[0]=1;
fact[1]=1;
function Factorial(n){
for(var i=2;i<=n;i++)
{
fact[i]=i*fact[i-1];
}
return fact[n];
}
console.log(Factorial(5));
希望能有所帮助
- 你能解释一下这个阶乘函数是如何工作的吗?
- 计算阶乘超过了Javascript中的最大整数限制
- 使用 .reduce() 对数字进行阶乘化
- 使用 VBScript 函数的阶乘
- JavaScript 中的阶乘.不行
- 递归函数 - 计数如何存储在此阶乘解决方案中
- JavaScript 阶乘递归
- 阶乘的最小有效非零位
- 如何阶乘只有 5 个数字
- Javascript,阶乘,太难了
- 通过用户提示查找数字的阶乘
- 如何在JavaScript中获取数字的阶乘
- Javascript函数计算整数的阶乘
- JavaScript的阶乘函数每次都返回0
- 阶乘函数运行错误:超过了最大调用堆栈大小
- 如何创建计算6阶乘的for循环
- 如何解释这个阶乘程序中的递归
- 如何在javascript中找到25的阶乘
- 阶乘. .我不知道为什么这个代码可以工作
- 为什么这不是阶乘呢?