递归函数(Recursive Function)是指在解决问题时调用自身的函数。它类似于循环,但不是重复执行一段代码,而是通过调用自身来处理问题的较小部分。
为什么使用递归函数?
-
问题分解:
- 当问题可以被分解成更小、类似的子问题时,递归函数非常有用。
-
代码简洁性:
- 对于某些问题,使用递归比使用循环可以使代码更简洁、易于理解。
关键组成部分:
-
基本情况(Base Case) :
- 这是停止递归的条件。如果没有基本情况,函数将会无限调用自身。
-
递归情况(Recursive Case) :
- 在递归情况中,函数调用自身并处理问题的较小部分,直到达到基本情况为止。
demo:
if (countDown <= 0) {
console.log('Goo...!!!');
return;
}
console.log(countDown);
runOrder(countDown - 1);
}
runOrder(4);
// 输出:
// 4
// 3
// 2
// 1
// Goo...!!!
在这个例子中,runOrder 函数通过递减的方式从 countDown 开始倒数,直到倒数到0时输出 'Goo...!!!' 并停止递归。
demo1:
if (times <= 0) {
console.log(`Who's there?`);
return;
}
console.log(times);
knockKnock(times - 1);
}
knockKnock(3);
// 输出:
// 3
// 2
// 1
// Who's there?
在这个例子中,knockKnock 函数从 times 开始倒数,每次递减并输出倒数的数字,直到倒数到0时输出 'Who's there?' 并停止递归。
总结
递归函数通过反复调用自身来解决问题,适合于可以分解成较小、相似问题的场景。它们的基本情况定义了递归何时停止,而递归情况则负责将问题分解为更小的部分,直到达到基本情况为止。递归虽然强大,但需要谨慎使用,确保不会导致无限递归或性能问题。