递归是一种方法内调用自身方法的一种编程技术,像一些阶乘、求和等数学问题可以实现,不过复杂度会提高,最能体现递归之美的当属汉诺塔问题。同样我们用递归实现了斐波那契数列和三角数字。
汉诺塔问题:如下图所示,要求将一个座上的盘子全部搬运到最后一个支柱上,有一个辅助支柱。
搬运规则:
1.一次只能移动一张盘子
2.不能将较大的盘子放在较小的盘子上面
3.最后盘子只能全部放在某一个支柱上面
搬运示意图:下图是总数为3的搬运过程
显然,当进行到第三次搬运时,就回到总数为2的搬运题目,而第N个盘子可以在接下来的一步放入目标支柱(如上图的第四步);因此,我们可以考虑上面N-1块的盘子搬运问题,而N-1块的盘子搬运又可以看成是上面为N-2块加最底层那块,同样连续调用相同的方法解决,最后归结为一块的搬运问题。
下面是实现代码:
package Recursion;
//递归方法的使用,test(),test2();
public class Recursion1 {
public static void main(String[] args) {
// test2(50);
int total = Redetangle(5);
System.out.println(total);
System.out.println(Refeibbo(5))