算法与数据结构(三) - 递归

递归

在方法的内部调用该方法本身的编程方式
在这里插入图片描述
如图所示,四个函数可以看做都是一个方法,只不过为了区分流程画成了四个,数据从第一个入口进入该方法,符合一定条件之后反复调用本身,直到符合条件不需要调用本身时将结果一层一层返回,直到第一层输出

fabonacci(斐波那契) 实现

又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 从第三个开始它本身时前两个数的和,以此类推

递归实现:

package com.company;

/**
 * @author Shuoshi.Yan
 * @package:com.company
 * @className:fabonacci数列
 * @description:
 * @date 2019-11-08 14:27
 * @version:V1.0
 * @NOTICE:本内容仅限于xxx有限公司内部传阅,禁止外泄以及用于其他的商业项目
 * @ Copyright  xxx. All rights reserved.
 **/

public class Fabonacci {
    // 1 1 2 3 5 8 ...

    public static int test(int i){
        //因为前两个都是1所以返回1
        if(i ==1 || i == 2){
            return 1;
        }else{
            //取它的上一个和上上个的和
            return test(i -1) + test(i - 2);
        }
    }

    public static void main(String[] args) {
        // 1 1 2 3 5 8 13 21 ...
        System.out.println("第8个为:" + test(8));
    }

}

结果:
在这里插入图片描述

Hano(汉诺塔) 实现

看代码之前建议先玩一下"汉诺塔"游戏
代码实现:

package com.company;

/**
 * @author Shuoshi.Yan
 * @package:com.company
 * @className:(Hano)汉诺塔
 * @description:
 * @date 2019-11-08 17:28
 * @version:V1.0
 * @NOTICE:本内容仅限于xxx有限公司内部传阅,禁止外泄以及用于其他的商业项目
 * @ Copyright  xxx. All rights reserved.
 **/

public class HanNuoTa {

    /**
     *
     * @param n 共n个需要放置
     * @param start 第一个位置
     * @param between 中间位置
     * @param end 目标位置
     *       需要注意的是:需要
     */
    //可以将除了最后一层的看作一个整体,把这个整理放置到中间位置,把最有一个放置到目标位置
    public static void getHano(int n,String start,String between,String end){
        //若只有一个将这个从start放置到目标位置
        if(n == 1){
            System.out.println("将" + n + "从" + start + "放置到" + end);
        }else{
            //若不是一个,将除了倒数第二个的所有从第一个位置放置到中间位置
            getHano(n - 1,start,end,between);
            //将倒数第二个放置到目标位置
            System.out.println("将" + n + "从" + start + "放置到" + end);
            //将中间位置的移动到目标位置
            getHano(n - 1,between,start,end);
        }
    }

    public static void main(String[] args) {
        getHano(3,"A","B","C");
    }

}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值