Python之初识递归

什么是递归

  在函数中调用函数本身,就是递归,当然不能无限制调用,调用深度为997,想要修改递归深度,用sys模块

import sys
sys.setrecursionlimit(100000)  # 修改深度为100000,具体到多少得看及计算机性能

斐波那契数列

# 函数形式的斐波那契数列(长度20)
def func(n):
    if n==1 or n ==2:
        return  1
    return func(n-1)+func(n-2)

ret = func(20)
print(ret)
# 堆栈形式的斐波那契数列(长度20)
l = []
for i in range(20):
    if i==0 or i==1:
        l.append(1)
    else:
        l.append(l[i-1]+l[i-2])
print(l[19])

二分查找算法

l = [1, 2, 3, 4, 5, 6, 7, 8, 22, 33, 44, 55, 66, 77, 87, 96, 99]
def func(l,s,start=0,end=None):
    end = len(l) if end is None else end
    mid = (end-start)//2+start
    if start>end:
        return ‘没有这个元素‘
    else:
        if s>l[mid]:
            return func(l,s,start=mid+1,end=end)
        elif s<l[mid]:
            return func(l,s,start=start,end=mid-1)
        elif s==l[mid]:
            return ‘找到了,在第%s个位置‘%mid

ret = func(l,66)
print(ret)

三级菜单

menu = {
    ‘山西‘:{
        ‘太原‘:{
            ‘小店区‘:{},
            ‘尖草坪区‘:{}
        },
        ‘运城‘:{
            ‘盐湖区‘:{},
            ‘新绛县‘:{}
        },
        ‘大同‘:{}
    },
    ‘上海‘:{
        ‘明珠‘:{
            ‘广场‘:{},
            ‘雪花啤酒‘:{}
        },
        ‘东方‘:{}
    },
    ‘山东‘:{
        ‘青岛‘:{
            ‘青岛啤酒‘:{},
            ‘海滩‘:{}
        },
        ‘日照‘:{
            ‘沙滩‘:{}
        }
    }
}

# 递归函数形式的三级菜单
def threeMenu(menu):
    while True:
        for i in menu.keys():print(i)
        k = input(‘请选择城市:‘)
        if k==‘b‘ or k==‘q‘:return k
        elif k in menu.keys() and menu[k]:
            ret = threeMenu(menu[k])
            if ret ==‘q‘: return ‘q‘
        elif (not menu.get(k)) or (not menu[k]):
            continue

threeMenu(menu)

# 堆栈形式的三级菜单
l = [menu]
while l:
    for i in l[-1].keys():print(i)
    key = input(‘请输入:‘).strip()
    if key in l[-1].keys() and l[-1][key]:l.append(l[-1][key])
    if key==‘b‘:
        l.pop()
    if key==‘q‘:
        break

三级菜单

原文地址:https://www.cnblogs.com/xfdhh/p/9943453.html

时间: 2024-10-12 01:21:40

Python之初识递归的相关文章

python之理解——递归

古之欲明明德于天下者,先治其国:欲治其国者,先齐其家:欲齐其家者,先修其身:欲修其身者,先正其心:欲正其心者,先诚其意:欲诚其意者,先致其知,致知在格物.物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平. 这是从林海峰博客里面copy的.很好的解释了,python函数的递归. 那什么是递归? 在函数内部,可以调用其他函数.如果在调用一个函数的过程中直接或间接调用自身本身 def digui(n): print(n) digui(n) digui(

初识递归

#递归函数 # 了解什么是递归 : 在函数中调用自身函数 # 最大递归深度默认是997/998 -- 是python从内存角度出发做得限制 # 能看懂递归 # 能知道递归的应用场景 # 初识递归 -- # 算法 -- 二分查找算法 # 三级菜单 -- 递归实现 # while True: # print('从前有座山') # def story(): # print('从前有座山') # story() # print(111) # # story() #RecursionError: maxi

python 内置&&递归

lambda 优点: 1:可以简单使用一个脚本来替代我们的函数 2:不用考虑命名的问题 3:简化代码的可读性,不用跳转到def了,省去这样的步骤 内置函数:bif filter:过滤器 map:映射  1 >>> lambda x: 2*x+1 2 <function <lambda> at 0x00000000026C6AC8> 3 >>> g=lambda x: 2*x+1 4 >>> g(3) 5 7 6 >>

Python的最大递归深度错误 “maximum recursion depth exceeded while calling a Python object”

今天在写爬虫的时候,发现了一个诡异的事情,使用str方法强制转换一个BeautifulSoup对象成字符串的时候报错了,提示是"maximum recursion depth exceeded while calling a Python object",意思大致是"当调用该对象超过最大递归深度" 报错如下:   Traceback (most recent call last):   File "<stdin>", line 1, 

Python学习日志之Python数据结构初识

Python数据结构初识: 一.Python数据结构概述 1.何为数据结构 在程序中,同样的一个或几个数据组织起来,可以有不同的组织方式,也就是不同的存储方式,不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构就叫做数据结构 例如: 有一串字符串:"abc",我们将它重新组织一下,比如通过list()函数将"abc"变成["a","b","c"],那么这个时候数据发生了重组,重组之后的结构就发生了

Python归并排序(递归实现)

为什么归并排序如此有用?1. 快捷和稳定归并排序成为?一个非常棒的排序算法主要是因为它的快捷和稳定.它的复杂度即使在最差情况下都是O(n log n).而快速排序在最差情况下的复杂度是O(n^2),当n=20的时候,它比归并要慢4.6倍. 2.容易实现 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #coding:utf-8 def merge_sort(array):     length = le

和我一起学python,初识python (life is short ,we need python)

作者:tobecrazy  出处:http://www.cnblogs.com/tobecrazy 欢迎转载,转载请注明出处.thank you! 由于项目需要(并非因为life is short),开始学习python. 1.python 是什么 和perl一样,python是一种脚本语言.由于语法简洁而清晰,比较接近伪代码 ,易于维护,逐渐开始流行起来. 高级计算机语言,规避内存指针等复杂问题 解释性语言,实时显示运行 支持多平台,linux.windows等 2.python运行环境 由于

Python正则表达式初识(十)附正则表达式总结

今天分享正则表达式最后一个特殊字符"\d",具体的教程如下. 1.特殊字符"\d"十分常用,其代表的意思是数字.代码演示如下图所示. 其中"+"的意思是表示连续,在这里代表的意思是连续的数字.但是输出只有"4"这个字符,原因是贪婪模式所致,在上一篇文章中也有提及. 2.如果想要匹配"2004",则需要加个特殊字符"?",如下图所示. 此时是非贪婪模式,匹配从前往后进行,且匹配连续的数字,

使用Python语言理解递归

递归 一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃. 递归其实是程序设计语言学习过程中很快就会接触到的东西,但有关递归的理解可能还会有一些遗漏,下面对此方面进行更加深入的理解 递归的分类 这里根据递归调用的数量分为线性递归.二路递归与多重递归 线性递归 如果一个递归调用最多开始一个其他递归调用,我们称之为线性递归. 例如: def binary_search(data, target, low, high): """ 二分查