215讲方法的递归、斐波那契、老鼠走迷宫
内容纲要

215讲方法的递归、斐波那契、老鼠走迷宫

file

file

file

file

  • return返回:在哪里调用就在哪里返回
  • factorial阶乘,递归实现阶乘。

file

file

  • 谁调用就把结果返回给谁

  • 如果递归的是数组或者对象等引用类型,则会相互影响结果。

斐波那契

file

public class Test{
    public static void main(String[] args){
        F f = new F();
        int n = 7;
        int res = f.fibonacii(n);
        if(res == -1){
            System.out.println("输入的数有误。");
        }else
        System.out.println("斐波那契数的第n个是 = " + f.fibonacii(n));
    }
}
class F{
    /*
    思路分析:
    1.如果方法中的形参定义数列的位置,如果n = 1,2则结果是2
    2.n = f(n-1) + f(n-2)
    */
    int num;
    public int fibonacii(int n){
        if(n == 1 || n ==2){
            num = 1;
            return 1;
        }else if(n >= 3){
            num = fibonacii(n-1) + fibonacii(n-2);
            return num;
        }else{
            return num = -1;
        }
    }
}
package main.daytwo;
//猴子吃桃子
public class Test{
    public static void main(String[] args){
        P monkey = new P();
        int n = 1;
        int res = monkey.peach(n);
        if(res == -1){
            System.out.print("输入有误,请输入1-10");
        }else{
            System.out.println("第" + n + "天还剩" + monkey.peach(n) + "个桃子");
        }
    }
}
class P{
    /*
        猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中一半,并再多吃了一个!
        以后每天猴子都吃其中的一半,然后再多吃一个,当到第10天时,再想多吃(即还没吃),
        发现只有1个桃子了。问题:最初共 多少个桃子?
    */
    /*
    思路分析:
    1.逆向分析。
    2.第10 天的时候只有1 个桃子,
    3.第9天则有 day9 = 2*(day10 + 1)个桃子
    4.第8天则有 day8 = 2*(day9 + 1)个桃子
    */
    public int peach(int day){
        int num;
        if(day >= 1 && day <= 10) {
            if (day == 10) {
                return num = 1;
            } else {
                num = 2 * (peach(day + 1) + 1);
                return num;
            }
        }else{
            return -1;
        }
    }
}
  • 斐波那契数列

file

  • 猴子吃桃子

file

老鼠走迷宫

file

注意:找路策略改变之后,路径也会发生变化。

心得:

  1. 每移动一个位置map[i][j]==0 然后给它赋值为map[i][j]=2;很重要,这是给小球每移动一下时候做个标记2为路径。

  2. 当小球下左右被挡的时候它会回溯到上一个点,并绕过往下走的路,妙啊!!!!请用内存图分析,有意思。

//老鼠走迷宫
package main.daytwo;

public class MiGong {
    public static void main(String[] args) {
        AA a = new AA();
                /*老鼠走迷宫
             用二维数组创建迷宫。以1 为墙壁,0 为可走路径。
              */
            int[][] map = new int[8][7];
            for (int i = 0; i < map[0].length; i++) {//这里创建上下底的地图边界
                map[0][i] = 1;
                map[7][i] = 1;
            }
            for (int i = 0; i < map.length; i++) {//这里创建地图左右边界
                map[i][0] = 1;
                map[i][6] = 1;
            }
            map[3][1] = 1;
            map[3][2] = 1;
            map[2][2] = 1;

            System.out.println("======遍历地图====");
            for (int j = 0; j < map.length; j++) {
                for (int i = 0; i < map[j].length; i++) {
                    System.out.print(map[j][i] + " ");
                }
                System.out.println();
            }
            System.out.println("====地图制作完成=====");
            a.findWay(map,1,1);
            System.out.println("===打印成功的地图===");
            for (int j = 0; j < map.length; j++) {
                for (int i = 0; i < map[j].length; i++) {
                    System.out.print(map[j][i] + " ");
                }
                System.out.println();
            }
    }
}
class AA {
    //创建一个初始点鼠鼠在map[1][1];
    //定义规则,老鼠可以走的点标记为2;老鼠不能走的点标记为3.墙壁自然是1;
    //当走到map[6][5];时表示成功,并退出循环;
    //有一个寻址规则,下右上左 方式寻路
    public boolean findWay(int[][] map, int i, int j) {
        if (map[6][5] == 2) {
            System.out.println("成功,老鼠走出迷宫");
            return true;
        } else {
            //假设老鼠能走下一步;
            if (map[i][j] == 0) {
                        map[i][j] = 2;
                        if (findWay(map, i + 1, j)) {//下
                            return true;
                        } else if (findWay(map, i, j + 1)) {//右
                            return true;
                        } else if (findWay(map, i - 1, j)) {//上
                            return true;
                        } else if (findWay(map, i, j - 1)) {//左
                            return true;
                        } else {
                            map[i][j] = 3;
                            return false;  //这里很好玩,要是return true则会执行到这里就跳出循环。
                        }
            }else
            return false;
        }
    }
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇