JavaScript - 递归
递归是指函数调用自身的过程。当我们需要解决一个可以分解成相同类型较小问题的问题时,递归非常有用。
什么是递归?
"递归"一词源于"recurring",意思是一遍又一遍地重复。递归函数是通过逐步改变输入来反复调用自身的函数。这里,改变输入一步意味着减少或增加输入一步。
每当递归函数满足基本条件时,执行就会停止。让我们通过一个例子来理解什么是基本条件。假设我们需要求一个数的阶乘。我们通过将输入减 1 来调用阶乘函数,并且当输入达到 1 时我们需要停止。所以,这里用一个作为基本条件。
递归如何工作?
递归基于分治的思想。这意味着我们将问题分解成更小的部分并求解。递归函数使用较小的输入调用自身并求解问题,当基本条件满足时,递归停止。
递归示例
让我们理解如何编写递归函数来求一个数的阶乘。正数 n 的阶乘如下所示:
n 的阶乘 (n!) = 1 * 2 * 3 * 4 *... * n
负数的阶乘不存在。 0 的阶乘为 1
在下面的例子中,我们将演示如何在 JavaScript 中使用递归来计算一个数字的阶乘。我们创建一个函数 fact(),其参数为 b,该参数从主函数中获取一个值 6。
- 首先,我们检查该数字是否等于 0。如果为真,则程序返回 1。
- 在 else 语句中,我们将检查 b*fact(b-1),其大致含义为 6*(6-1)。
- 在下一次递归中,它将等于 5*(5-1),依此类推。这样,函数将继续计算一个数字的阶乘。
- 递归结束后,函数将打印输入数字的阶乘值。
<html>
<body>
<h2> Factorial using JavaScript recursion </h2>
<script>
// 程序求一个数的阶乘
function fact(b) {
// if number is 0
if (b === 0) {
return 1;
}
// 如果数字为正数
else {
return b * fact(b - 1);
}
}
const n = 6;
// 如果 num 为非负数,则调用 factorial()
if (n > 0) {
let res = fact(n);
document.write(`The factorial of ${n} is ${res}`);
}
</script>
</body>
</html>
输出
The factorial of 6 is 720
在上面的输出中,用户可以看到,经过递归,我们发现该数字的阶乘为 720。

