递归的用法

本文介绍了经典的汉诺塔问题,详细阐述了搬运规则,并通过递归思想解析了解决此类问题的方法。通过示例展示了总数为3的搬运过程,分析了如何将问题简化为搬运更少数量盘子的问题,最终归结为搬运一块盘子的基本情况。
摘要由CSDN通过智能技术生成
    递归是一种方法内调用自身方法的一种编程技术,像一些阶乘、求和等数学问题可以实现,不过复杂度会提高,最能体现递归之美的当属汉诺塔问题。同样我们用递归实现了斐波那契数列和三角数字。

汉诺塔问题:如下图所示,要求将一个座上的盘子全部搬运到最后一个支柱上,有一个辅助支柱。
在这里插入图片描述
搬运规则:
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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值