首页 > 其他 > 详细

初识递归

时间:2019-03-12 22:22:25      阅读:165      评论:0      收藏:0      [点我收藏+]

初识递归

内容:

①什么是递归

②初识递归

③算法——二分查找法

④三级菜单——递归实现

 

一:概念

在函数中调用自身函数;

◆最大递归深度是997或者998 ,这是python从内存角度出发做的限制

◆修改最大深度:

import sys
 print(sys.setrecursionlimit(100000))

 

◆如果递归次数太多,则不太适合用递归来解决问题

◆优点:让代码更简单

◆缺点:占内存

技术分享图片
def age(n):
    if n == 4:
        return 40
    elif n > 0 and n < 4:
        return age(n+1) + 2
print(age(1))
栗子:求年龄

二:算法:经典算法,查找,排序,最短路径

技术分享图片
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 find(l,aim,start = 0,end = None):
    end = len(l) if end is None else end
    mid_index = (end - start)//2 + start
    if start <= end:
        if l[mid_index] < aim:
            return find(l,aim,start=mid_index + 1,end=end)
        elif l[mid_index] > aim:
            return find(l,aim,start=start,end=mid_index-1)
        else:
            return mid_index
      else:
        return sorry,你要找的不在这儿
ret = find(l,66)
print(ret)
二分查找法:必须处理有序的列表

 

技术分享图片
def factorial(n):
    if n == 1:
        return 1
    else:
        return n*factorial(n-1)
num = int(input(请输入数字:))
print(factorial(num))
栗子:递归实现阶乘

 

技术分享图片
menu = {
    北京: {
        海淀: {
            五道口: {
                soho: {},
                网易: {},
                google: {}
            },
            中关村: {
                爱奇艺: {},
                汽车之家: {},
                youku: {},
            },
            上地: {
                百度: {},
            },
        },
        昌平: {
            沙河: {
                老男孩: {},
                北航: {},
            },
            天通苑: {},
            回龙观: {},
        },
        朝阳: {},
        东城: {},
    },
    上海: {
        闵行: {
            "人民广场": {
                炸鸡店: {}
            }
        },
        闸北: {
            火车战: {
                携程: {}
            }
        },
        浦东: {},
    },
    山东: {},
}
def threeLM(dic):
    while True:
        for k in dic:print(k)
        key = input(input>>).strip()
        if key == b or key == q:return key
        elif key in dic.keys() and dic[key]:
             ret = threeLM(dic[key])
             if ret == q: return q
threeLM(menu)
栗子:三级菜单

 

初识递归

原文:https://www.cnblogs.com/twinkle-/p/10519995.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!