递归:斐波那契数列,汉诺塔

1. 递归介绍

定义:函数或者方法,直接或者间接调用函数本身,则称该函数或者方法为递归函数或者递归方法。

2.举例

2.1 斐波那契数列

斐波那契数列:1,1,2,3,5,8,13,21…类似于这样后面一个数是前面两个数的和,这是一个典型的递归问题。

public class Feibonacci {
    public static void main(String[] args) {

        System.out.println(feibonacci(4));
    }
    //返回第n项斐波那契数列
    public static int feibonacci(int n){
        if(n==1||n==2){
            return 1;
        }else{
            return feibonacci(n-2)+feibonacci(n-1);
        }
    }
}

2.2 汉诺塔问题

如下图所示,将A柱子的圆盘移动到C柱子,但是有一个规则:只能是小的圆盘放在大的圆盘上面,不能大的圆盘放在小的圆盘上面。
Alt
分析:经过思考后发现,这是一个比较典型的递归问题,可以将该问题总结为两种情况:第一种:只有一个盘子时,直接将盘子从A柱子移动到C柱子。第二种:当有两个或者两个以上的盘子时,第一步:将A柱子的盘子分为两种类型,即为上面的所有盘子和最下面的一个盘子,借助C柱子的作用,先将A柱子上面的所有盘子移动到B柱子,然后将最下面的盘子移动到C柱子;第二步:将B柱子上面的盘子用类似于A柱子的方法,移动到C柱子。

public class Hanoita {
    public static void main(String[] args) {
        hanoi(3,'A','B','C');
    }
    public static void hanoi(int i,char from,char in,char to){
        if(i==1){
            System.out.println("第1个盘子从"+from+"移动到"+to);
        }else{
            //将盘子分为上面所有的盘子和最下面的一个盘子
            //1.将上面所有的盘子移动到中间的柱子
            hanoi(i-1,from,to,in);
            //2.将最下面的盘子,移动到最右边的柱子
            System.out.println("第"+i+"盘子从"+from+"移动到"+to);
            //3.将上面的所有盘子从中间的柱子移动到最右边的柱子
            hanoi(i-1,in,from,to);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值