【考研用】【java版】数据结构与算法汇总 之 超基础递归题

1.递归打印

public void print(int i){
        //终止条件必须在最开始的地方
        if(i>0){
            System.out.println(i);
            print(i-1);
        }
    }

2.阶乘

public int jiecheng(int i){
        //终止条件:i=1
        if(i==1){
            return 1;

        }else{
            return i*jiecheng(i-1);
        }
    }

3.斐波那契数列

 //这种数列:1 1 2 3 5...每项都是前两项之和
    public int Febonacci(int i){
        if(i==1 || i==2){
            return 1;
        }else{
            return Febonacci(i-1)+Febonacci(i-1);
        }
    }

4.汉诺塔问题

有n个盘子,三根柱子:初始柱子1,中间柱子2,目标柱3。
// 要把n个盘子按从下往上的顺序,从初始柱子借助中间柱子移到目标柱子
//思想:只用考虑两个盘子:当前需要移动的盘子,和上面的那个盘子

public void hanoi(int n,char start, char mid, char fin){
        //终止条件(顶层):只有一个盘子要移动
        if(n==1){
            System.out.println("将第"+n+"个盘子从"+start+"移动到"+"fin");

        }else{
            //正在移动第n个盘子。将它上面的那个盘子移动到中间柱(上面的那个移动了代表上面的全部盘子都已经被移动好了)
            //此时移动顺序为132
            hanoi(n-1,start,fin,mid);
            //把第n个盘子移动到目标柱
            System.out.println("将第"+n+"个盘子从"+start+"移动到"+"fin");
            //将上面的盘子从中间柱移动到目标柱
            //此时移动顺序为213
            hanoi(n-1,mid,start,fin);
        }
    }

5.辗转相除法求最大公约数

辗转相除法:被除数与除数的最大公约数,就是除数与余数的最大公约数。

public int gcd(int m, int n){
        if(m%n == 0){
            return n;
        }else{
            return gcd(n,m%n);
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值