Go---递归

递归
第归就是函数/方法自己调用自己,每次调用时传入不同的变量.第归有助于编程者解决复杂的问题,同时可以让代码变得简洁。

递归需要遵守的重要原则
1)执行一个函数时,就创建一个新的受保护的独 立空间(新函数栈)
2)函数的局部变量是独立的,不会相互影响,如果希望各个函数栈使用同一个数据,使用引用传递
3)递归必须向退出递归的条件逼近,否则就是无限递归,死龟了:)
4)当一个函数执行完毕,或者遇到return, 就会返回,遵守谁调用,就将结果返回给谁,同时当函数执行完毕或者返回时,该函数本身也会被系统销毁

迷宫问题

package main

import (

    "fmt"

)

//编写一个函数,完成老鼠找路

//myMap *[8][7]int:地图, 保证是同一个地图,使用引用

//i,j 表示对地图的哪个点进行测试

func SetWay(myMap *[8][7]int,i int ,j int) bool {

    //分析出什么情况下,就找到出路

    //myMap[6][5] == 2

    if myMap[6][5]==2{

        return true

    }else {

        //说明要继续找

        if myMap[i][j]==0{ //如果这个点是可以探测

           

            //假设这个点是可以通的,但需要探测,上下左右

            //换个策略 下右上左

            myMap[i][j] =2

            if SetWay(myMap,i+1,j){ //下

                return true

            }else if SetWay(myMap,i,j+1){ //右

                return true

            }else if SetWay(myMap,i-1,j){ //上

                return true

            }else if SetWay(myMap,i,j-1){ //左

                return true

            }else{ //死路

                myMap[i][j]=3

                return false

            }

        }else{ //说明这个点不能探测,为1 是墙

            return false

        }

    }

}

func main(){

    //先创建一个二维数组,模拟迷宫

    //规则

    //1.如果元素的值为1,就是墙

    //2. 如果元素的值为0,是没有走过的点

    //3.如果元素的值为2,是一个通路

    //4.如果元素的值为3, 是走过的点,但是走不通

    var myMap [8][7]int

    //先把地图的最上和最下设置为1

    for i :=0;i<7;i++{

        myMap[0][i] = 1

        myMap[7][i] = 1

    }

    //先把地图的最左和最右设置为1

    for i :=0;i<8;i++{

        myMap[i][0] = 1

        myMap[i][6] = 1

    }

    myMap[3][1] = 1

    myMap[3][2] = 1

    //输出地图

    for i :=0;i<8;i++{

        for j:=0;j<7;j++{

            fmt.Print(myMap[i][j]," ")

        }

        fmt.Println()

    }

    //使用测试

    SetWay(&myMap,1,1)

    fmt.Println("探测完毕。。。。。")

    //输出地图

    for i :=0;i<8;i++{

        for j:=0;j<7;j++{

            fmt.Print(myMap[i][j]," ")

        }

        fmt.Println()

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值