zoukankan      html  css  js  c++  java
  • 递归脚本例子

    首先说一下在while循环中,continue、break、return的作用。

    continue:结束本次循环,开始下次循环。

    break:结束循环,直接跳到循环外边去。

    return:退出循环所在的函数,或者说是结束该方法。

    1.三级菜单

    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    需要打印的菜单菜单

    要求:输入地名进入下一级,输入q退出,退出b返回。

    def menu_2(menu):
        while True:
            for key in menu:
                print(key)
            choise = input('请选择:')
            if choise == 'q'or choise == "b":  如果输入b或q就直接退出,因为这本来就是第一层
                return choise
            elif choise in menu:
                bord = menu_2(menu[choise])   #在内循环中,q或b该层循环也结束了,只是退出那一层,如果要结束所有,还要传值。
                if bord == "q":      #如果输入q,该层结束还会传值到上层,上层接一个判断,然后一层一层结束。
                    return "q"
    menu_2(menu)

     另外一种使用压栈的思想做的也非常巧妙。

    def menu_1(menu):
        list1 = [menu]
        while True:
            ssg = list1.pop()   #把末尾的剔除,第一次是一整个
            for i in ssg:
                print(i)
            choice = input(">>>")
            if choice in ssg.keys() and ssg[choice]:
                list1.append(ssg)      #删除一个,加两个
                list1.append(ssg[choice])
            if choice == "b":
                continue
            if choice == "q":
                break
    menu_1(menu)

    2.斐波那契数列,形式:1、1、2、3、5.....

    def fob(n):
        if n == 1:
            return 1
        elif n ==2:
            return 1
        return fob(n-1) + fob(n-2)
    
    print(fob(10))
    
    递归的要素:有递有归。
    函数值中对函数进行引用,说明结果的来源。

    3.阶乘:1*2*3*4*5.....

    def jc(n):
        if n == 1:
            return 1
        return n*jc(n-1)
    print(jc(5))

    4.二分法

    lst = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
    def func(l,aim):
        mid = (len(l)-1)//2
        if l:
            if aim > l[mid]:
                func(l[mid+1:],aim)
            elif aim < l[mid]:
                func(l[:mid],aim)
            elif aim == l[mid]:
                print("bingo",mid)
        else:
            print('找不到')
    func(lst,66)
    func(lst,6)

    升级版

    def search(num,l,start=None,end=None):
        start = start if start else 0
        end = end if end else len(l) - 1
        mid = (end - start)//2 + start
        if start > end:
            return None
        elif l[mid] > num :
            return search(num,l,start,mid-1)
        elif l[mid] < num:
            return search(num,l,mid+1,end)
        elif l[mid] == num:
            return mid
  • 相关阅读:
    Ant-编译构建(2)-第3方jar包引入、log4j2
    Ant-编译构建(1)-HelloWorld
    java List的初始化
    传入json字符串的post请求
    HttPclient 以post方式发送json
    cron表达式详解,cron表达式写法,cron表达式例子
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
    Java两种延时——thread和timer
    List<List<Object>> list = new ArrayList<List<Object>>(); 求回答补充问题 list.get(position).add(Object);为什么会报错啊我想在对应的list里面添加对象
    关于 charset 的几种编码方式
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/7805666.html
Copyright © 2011-2022 走看看