javascript - 阶乘递归,给出未定义
问题描述
我试图简单地找到递归阶乘
function factorial(num, result) {
console.log('num', num)
if (num === 0) {
console.log('res ', result);
return result;
} else {
result = result * num;
console.log(result)
factorial(--num, result);
}
}
let res = factorial(3, 1)
console.log(res)
它给出了undefined,不知道为什么,需要一些帮助。
解决方案
除了缺少的return
陈述,一些注释:
使用结果的默认值。这允许在没有给定起始值的情况下调用函数,并且只允许使用单个参数。
仅提前一次退出递归调用,不与 .
else
组合使用return
。该return
语句省略了以下else
语句。继续编写没有else
部分的代码。在函数末尾返回一个递归调用,以允许使用编译器进行 TCO(尾调用优化)。这在不扩展堆栈的情况下工作,因为最后一次调用被实际的递归调用替换。这种优化可能实际上并没有实现。
如果您只需要减少的值而不再次使用减少的值,请不要使用减量运算符。
将计算移到函数调用中。
function factorial(num, result = 1) {
console.log('num', num);
if (num === 0) return result;
return factorial(num - 1, result * num);
}
console.log(factorial(3))
推荐阅读
- firebase - 如果我在 Firestore 中有重复的文件,我怎样才能只收到一份?Flutter Firestore
- php - 从数组中获取数据依赖于数据库整数
- php - 将嵌套对象的值相加
- flutter - 如何在flutter中获取文件的绝对路径
- c - 什么时候用箭头,什么时候用点?
- ios - 白色底栏仅在新的 ios 版本上
- javascript - 更改 gulp 文件中的变量
- visual-studio - 在 Visual Studio 2019 for .Net Core 中禁用的文档大纲控件
- javascript - if-else 语句中抛出错误时无法处理异步错误
- javascript - 将对象数组的日期值与字符串数组中的日期进行比较