javascript - 递归函数的意外结果
问题描述
我遵循了整个执行的路径,根据我的计算,它应该返回 24,但实际上它返回 7
function factorial(x) {
if (x < 0) return;
if (x === 0) return 1;
return x + 1 * factorial(x - 1);
}
let x = factorial(3);
console.log(x); //7
我可能无法正确理解递归函数
解决方案
您似乎非常了解递归编程的基础知识,但是我不确定您是否完全理解阶乘函数的工作原理。
例如:
3!= 3*2*1 = 6
4!= 4*3*2*1 = 24
你可以用递归的方式来表达:
a(0) = 1
a(n) = a(n - 1) * n
在您的代码中实现此逻辑,您将获得以下信息:
function factorial(x) {
if (x < 0) return;
if (x === 0) return 1;
return x * factorial(x - 1);
}
console.log(factorial(4))
按预期返回 24 。
推荐阅读
- python - TKinter GUI 使用 root.after 冻结
- java - 将二维数组转换为一维数组时如何删除不必要的 int 分配?
- vb.net - 在 VB.Net 中使用 Lambda(或 LINQ)将集合拆分为 n 个部分
- c# - 在razor的表单中添加参数
- python-2.7 - python sqlite3 .executemany() 与命名占位符?
- java - Confused About Junit Test for List
- python - TypeError:“builtin_function_or_method”对象不可迭代
- grails - 使用 Grails Promises 时生成 NullPointerException
- android - OpenCV 测量居中对象的大小
- acumatica - Acumatica 自动化步骤无法添加简单的打印操作或报告