java学习----递归

斐波那契数:

public class Der {
    public static void main(String[] args) {
 tool nue=new tool();
        int a=nue.Fibonacci(6);
        System.out.println(a);


    }
}
class tool{
    public int Fibonacci(int n){
        if (n >= 1) {
            if (n == 2 || n == 1)
                return 1;
            else
                return Fibonacci(n-1)+Fibonacci(n-2);//斐波那契数从第三个开始就是前两位数之和为该位数
        }
        return 0;
    }
            
    }
}
 //猴子吃桃,一天吃总数的一半多一个,第十天还有1个
 public class Der {
    public static void main(String[] args) {
      int day01=1;
        Monkey su=new Monkey();
        int v=su.Peach(day01);
        System.out.println(v);



    }
}
class Monkey{
    public int Peach(int n){
        if (n==10)//如果就是最后一天那么就时1个桃
            return 1;
        else if (n>=1&&n<=9)//十天这内
         return( Peach((n+1))+1)*2;//代表的是后一天(n+1),Peach(n+1)代表的是后一天的桃
//( Peach((n+1))+1)*2前一天的桃=(后一天的桃+1)*2
        else
            return -1;



    }
}

//走迷宫
public class Der {
    public static void main(String[] args) {
  int map[][] = new int[8][7];
        //布置地图
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++) {
                map[0][j] = 1;
                map[i][0] = 1;
                map[7][j] = 1;
                map[i][6] = 1;

            }
        }
        map[1][2] = 1;
        map[3][1] = 1;
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++)
                System.out.print(map[i][j]);
            System.out.println();
        }
        Secret su = new Secret();
        boolean v = su.Route(map, 1, 1);
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++)
                System.out.print(map[i][j]);
            System.out.println();


        }
    }
}
class Secret{
    //设置0为可以走,1为障碍物,2为可以走且已走,3为走了但为死路
    public boolean Route(int a[][],int i,int j)
    {
        if (a[6][5]==2)//预设的终点,如果终点为2代表已经走到了。
        {
            return true;

        }else {
            if (a[i][j]==0)//如果当前的位置为可以走的点的话
            {
                a[i][j] = 2;//那么就将当前位置标记为2,为已走的位置

                if (Route(a, i + 1, j))//然后从当前位置向下一个走,判断是否可以走
                    return true;
                else if (Route(a, i, j + 1))//再判断右边
                    return true;
                else if (Route(a, i - 1, j))//上边
                    return true;
                else if (Route(a, i, j - 1))//左边
                    return true;
                else {
                    a[i][j] = 3;//如果当前位置不可走则设置为3,走过为死路
                    return false;
                }
            }
            else
                return false;
        }

    }
}
//汉诺塔
public class Der {
    public static void main(String[] args) { 
tower hanoitower=new tower();
        hanoitower.Hanoitower(5,'A','B','C');
    }
}
 class tower{
    //num表示需要移动卡片的个数
    //a,b,c表示移动的三根柱子
    public void Hanoitower(int num,char a,char b,char c){

        if (num==1)//如果个数为一个,则直接把a柱上的移动到c
            System.out.println(a+"->"+c);
        else {
            Hanoitower(num-1,a,c,b);//num-1表示总卡牌除了最下面的一个之和
            //要想把最后一个先移到c柱就得先移动前面的卡牌,那么就需要借助b达到目的
            System.out.println(a+"->"+c);//将a最后一个移到c
            Hanoitower(num-1,b,a,c);//b中移到a借助c

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值