JavaScript 阶乘递归
JavaScript Factorial Recursion
在下面的脚本中,为什么badFactorial
在goodFactorial
工作时吹堆栈?
function badFactorial(n){
if( n < 0){
return 1;
}
if(n < 2){
return n;
}
return badFactorial(n * (n-1));
}
function goodFactorial(n){
if(n < 2){
return n;
}
return goodFactorial(n-1) * n;
}
你创造了一个无限循环
badFactorial(n * (n-1));
它只会继续增加。
假设你在 7 中通过. 你不是在减少,而是在做
return badfactorial(7 * 6)
当您需要 :
return badfactorial(6) * 7;
所以把回报改成像你好因子的,
badfactorial(n-1) * n;
因为在
badFactorial(n * (n-1))
n 的值总是在增加,永远不会达到 0。这就是您收到该错误的原因。
而在第二种情况下,
return goodFactorial(n-1) * n;
n 每次递减,这对于任何递归函数都非常重要。
永远记住,在递归调用方面,n 或任何参数的值必须减小,否则你会收到堆栈溢出错误。
相关文章:
- 数组在递归方法中设置为null
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 递归使用 eval() 是检查程序执行的好方法吗?
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 你能解释一下这个阶乘函数是如何工作的吗?
- 递归深度比较
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 递归函数中断
- 如何递归地获取嵌套对象中所有子对象的列表
- JavaScript 素数搜索无限递归
- 在递归生成器函数中,yield后面的*(星号/星号)语法意味着什么
- 递归|两个函数名
- 有没有一种方法可以在Javascript中进行可变递归currying
- 如何对不同的表递归使用以下代码
- 将jQuery对象传递到setTimeout递归函数中
- 有更好的方法吗?(递归解析HTML unicode实体)
- 递归函数 - 计数如何存储在此阶乘解决方案中
- JavaScript 阶乘递归
- 如何解释这个阶乘程序中的递归
- Javascript'太多的递归'关于一个简单的阶乘函数