数据结构算法---递归

一、递归思想
  递归的思想就是把一个问题分解成一个个的子问题和子子问题,然后这些子问题逐级返回,得到最终结果。
总结一下递归需要满足的几个条件:

  1. 一个问题的解可以分解为几个子问题的解。
  2. 问题与子问题,求解思路完全一样。
  3. 存在递归终止条件。

二、斐波那契数列
 
  1.斐波那契数列: 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
 
  2.代码实现

    private static int febonacii(int index) {
        //终止条件
        if (index == 0) {
            return 0;
        }else if(index ==1){
        	return 1;
        }else {
            //递归
            return febonacii(index - 1) + febonacii(index - 2);
        }

    }

3.结果:

febonacii(8)
34

三、汉诺塔
 1.汉诺塔游戏规则:把所有圆环从最左边的柱子移动到最右边的柱子(有三个柱子),每次只能移动一个盘子,大圆环不能压在小圆环上。
 2.分析:第一关
在这里插入图片描述
第二关:
在这里插入图片描述
第三关:
在这里插入图片描述
第四关:
在这里插入图片描述
通过上面演示可以分析得出以下结论:

  1. 只有1个圆环则直接把圆环从from移动到to
  2. 无论多少(n)个圆环都看成两个圆环(n-1)为一个圆环,n为最后一个圆环
  3. 把n-1个圆环移动到中间柱子
  4. 移动最后一个盘子到最右边的目标柱子
  5. 把n-1个圆环从中间柱子移动到目标柱子

3.代码实现:

public static void hanoi(int n, String from, String in, String to) {
        //只有一个圆环则直接把圆环从from移动到to
        if (n == 1) {
            System.out.println("第1个圆环从" + from + "移动到" + to);
        }else {
         //无论多少(n)个圆环都看成两个圆环(n-1)为一个圆环,n为最后一个圆环
            //把n-1个圆环移动到中间柱子
            hanoi(n-1,from,to,in);
            //移动最后一个盘子到最右边的目标柱子
            System.out.println("第"+n+"个圆环从" + from + "移动到" + to);
            //把n-1个圆环从中间柱子移动到目标柱子
            hanoi(n-1,in,from,to);
        }

    }

4.结果:

 hanoi(4,"A","B","C");1个圆环从A移动到B
第2个圆环从A移动到C
第1个圆环从B移动到C
第3个圆环从A移动到B
第1个圆环从C移动到A
第2个圆环从C移动到B
第1个圆环从A移动到B
第4个圆环从A移动到C
第1个圆环从B移动到C
第2个圆环从B移动到A
第1个圆环从C移动到A
第3个圆环从B移动到C
第1个圆环从A移动到B
第2个圆环从A移动到C
第1个圆环从B移动到C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值