递归函数-汉诺塔经典递归
前言 最近在读《JavaScript语言精粹》,对递归函数有了进一步的认识,希望总结下来: 递归是一种强大的编程技术,他把一个问题分解为一组相似的子问题,每一问题都用一个寻常解去解决。递归函数就是会直接或者间接调用自身的一种函数,一般来说,一个递归函数调用自身去解决它的子问题。 "汉诺塔"经典递归问题 "汉诺塔"是印度的一个古老传说,也是程序设计中的经典的递归问题,是一个著名的益智游戏: 题目如下: 塔上有三根柱子和一套直径各不相同的空心圆盘,开始时源柱子上的所有圆盘都按从大到小的顺序排列。目标是通过每一次移动一个圆盘到另一根柱子上,最终把一堆圆盘移动到目标柱子上,过程中不允许把较大的圆盘放置在较小的圆盘上; 寻找规律(把所有的圆盘移动到C): 1)n(圆盘个数) == 1 第一次:1号盘 A -> C sum(移动次数) = 1 2)n == 2 第一次:1号盘 A -> B 第二次:2号盘 A -> C 第三次:1号盘 B -> C sum = 3 3)n == 3 第一次:1号盘 A -> C 第二次:2号盘 A -> B 第三次:1号盘 C -> B 第四次:3号盘 A -> C 第五次:1号盘 B -> A 第六次:2号盘 B -> C 第七次