js 递归
思想:递归就是将一个大问题分解成 n 个相似的小问题,然后不断地调用自身去解决这些小问题,从而求出结果。
实践:
- 汉诺塔
塔的设备包括三根柱子和一套直径各不相同的空心圆盘。开始时源柱子上的所有圆盘都按照较小的放在较大的圆盘之上的顺序堆叠。目标是通过每一次移动一个圆盘到另一根柱子上,最终将一堆圆盘移动到目标柱子上,过程中不可以将大圆盘放置在较小圆盘之上。
代码示例:
;(function(){
var i = 0;
/*
* disc: 盘子个数
* src: 源柱子
* aux: 辅助柱子
* dst: 目标柱子
*/
var hanoi = function(disc, src, aux, dst){
// debugger;
if (disc > 0) {
hanoi(disc-1, src, dst, aux);
document.writeln("Move disc "+ disc +" from "+ src +" to "+ dst + "<br>");
hanoi(disc-1, aux, src, dst);
i++;
}
}
hanoi(2, "源柱子", "辅助柱子", "目标柱子");
document.writeln("共花费了 "+ i +" 步<br>");
})();
- 阶乘
数学公式:n! = n * (n-1) * … * 1
代码示例:
;(function(){
var i = 10;
// 阶乘
var factorial = function(num){
if (num > 0) {
return num * factorial(num - 1);
} else {
return 1; // 0的阶乘也是1,因为 1!= 1*0!
}
}
document.writeln(i + " 的阶乘是 "+ factorial(i));
})();