zoukankan      html  css  js  c++  java
  • python系列--函数--递归函数

    在一个函数里面 调用自己
    默认的递归最大限度 1000
    修改最大限度:

    import sys
    sys.setrecursionlimit(num)

    最好不要修改默认的递归最大限度

    def story()
        print('aaa')
        story()
        print('bbb')     #永远不会执行到这一步
    story()

    -----------
    例子:A比B大2岁,B比C大2岁,C比D大2岁,D 10岁,求A的岁数

    def age(n):
        if n == 1:
            return 10
        return age(n - 1) + 2
    print(age(4))
    #16

    -------------

    例子:求4!

    def jie(n):
        if n == 1:
            return 1
        return n*jie(n - 1)
    print(jie(4))
    #24

    ---------------

    例子:斐波那契数列 1,1,2,3,5,8,13,21,34.....

    def fib(n):
        if n == 1 or n == 2:
            return 1
        return fib(n - 1) + fib(n - 2)
    print(fib(6))
    #8

    -------------------------

    二分查找算法

    例子:求66在一数列中的位置

    l = [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 serch(l,num,start = 0,end = None):
        if not end:
            end = len(l) - 1
        mid = (end - start) // 2 + start
        if start > end:
            return "找不到"
        elif num > l[mid]:
            return serch(l,num,mid + 1,end)
        elif num < l[mid]:
            return serch(l,num,start,mid - 1)
        elif num == l[mid]:
            return num,mid
    print(serch(l,66))
    #(66,17)

    -------------------

    例子:三级菜单

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

    -

    def three(dic):
        while True:
            for key in dic:
                print(key)
            choice = input("输入:")
            if choice == 'q' or choice == 'b':
                return choice
            elif choice in dic.keys() and dic[choice]:
                ret = three(dic[choice])
                if ret == 'q':                                  #关键点:如果返回值不能继续往上传递,只能返回上一级函数
                    return 'q'                      #能继续往上传递,那么就能一直返回到第一次调用的时候,结束整个函数
            elif (not dic.get(choice)) or (not dic[choice]):
                continue
    print(three(menu)) 
  • 相关阅读:
    修改RedHat7的root用户密码
    Linux目录,rpm及top,vi命令简记
    Centos7或RedHat7下安装Mysql
    异常、线程
    File类
    JDBC的学习(一)
    MySql多表查询_事务_DCL(资料三)
    MySql约束_设计_备份还原(资料二)
    MySql基础_DDL_DML_DQL(资料一)
    算法小结(一)
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/12852087.html
Copyright © 2011-2022 走看看