js 递归

基本思想

递归就是将一个大问题分解成 n 个相似的小问题,然后不断地调用自身去解决这些小问题,从而求出结果。

实践

汉诺塔
介绍
  • 塔的设备包括三根柱子和一套直径各不相同的空心圆盘。
  • 开始时源柱子上的所有圆盘都按照较小的放在较大的圆盘之上的顺序堆叠。
  • 目标是通过每一次移动一个圆盘到另一根柱子上,最终将一堆圆盘移动到目标柱子上,过程中不可以将大圆盘放置在较小圆盘之上。

汉诺塔

代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;(function(){
var i = 0;
/*
* disc: 盘子个数
* src: 源柱子 A
* aux: 辅助柱子 B
* dst: 目标柱子 C
*/
var hanoi = function(disc, src, aux, dst) {
if (disc > 0) {
hanoi(disc-1, src, dst, aux);
console.log('Move disc '+ disc +' from '+ src +' to '+ dst);
hanoi(disc-1, aux, src, dst);
i++;
}
}
hanoi(2, '源柱子', '辅助柱子', '目标柱子');
console.log('共花费了 '+ i +' 步');
})();
output
1
2
3
4
Move disc 1 from 源柱子 to 辅助柱子
Move disc 2 from 源柱子 to 目标柱子
Move disc 1 from 辅助柱子 to 目标柱子
共花费了 3
阶乘
数学公式:n! = n * (n-1) * ... * 2 * 1
代码示例
1
2
3
4
5
6
7
8
9
10
11
12
;(function(){
var i = 10;
// 阶乘
var factorial = function(num){
if (num > 0) {
return num * factorial(num - 1);
} else {
return 1; // 0的阶乘也是1,因为 1!= 1*0!
}
}
console.log(i + ' 的阶乘是 '+ factorial(i));
})();
output
1
10 的阶乘是 3628800
------------- 本文结束 感谢您的阅读 -------------

本文标题:js 递归

文章作者:水中熊

发布时间:2018年06月11日 - 14:06

最后更新:2018年06月11日 - 17:06

原始链接:https://shuizhongxiong.github.io/js-recursion.html

许可协议: 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。 转载请保留原文链接及作者。

🌹坚持原创技术分享,您的支持将鼓励我继续创作!🌹
0%