程序调用自身的编程技巧称为递归(recursion)。 递归作为一种算法在程序设计语言中普遍应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法, 它一般把一个大型复杂的问题层层转化为一个与原问题类似的规模较小的问题来求解, 递归策略只需少许的程序就可描述出解题过程所须要的屡次重复计算,大大地减小了程序的代码量。 递归的能力在于用有限的语句来定义对象的无限集合。 通常来讲,递归须要有边界条件、递归前进段和递归返回段。 当边界条件不知足时,递归前进;当边界条件知足时,递归返回。java
''' fun( 3 ) '''算法
需求:编程
A 放入 N 个盘子,而且盘子在柱子中从大到小依次向上小盘子不能在大盘子上,求把 A 中的盘子移到 C 中最少移动几回,如何移动。注意每次只能一个 。函数
分析:源码分析
汉诺塔问题就是把A柱上的N-1个盘子通过C移动到B,再把A上的最大的盘子移到C,而B上的N-1再相似上述步骤递归循环移到C上。动画
动画演示:spa
上代码:设计
private void move(String a,String c){
System.out.println("从" + a + "到" + c);
}
public void hanoi(int n ,String a,String b,String c){
if(n == 1){
move(a,c);
}else{
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
}
}
复制代码