码迷,mamicode.com
首页 > 编程语言 > 详细

python开发 随笔补充之递归函数与实例

时间:2017-09-06 17:09:42      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:start   class   strong   ide   ret   src   开发   div   pre   

 

递归函数

递归函数的定义:

  1、一个函数在内部调用自己,这就叫递归函数

  2、递归的层数在python里面是有限制的

  3、必须要有一个结束条件

 

解耦:

要完成一个完整的功能,但这个功能的规模要尽量小,并且和这个功能无关的其他代码应该和这个函数分离。

  1、增强代码的重要性

  2、减少代码变更的相互影响

 

例一:

现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。

你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。

你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。

那你问金鑫,金鑫告诉你,他40了。。。

这个时候你是不是就知道了?alex多大?

 

 

 

首先,你是不是问alex的年龄,结果又找到egon、武sir、金鑫,你挨个儿问过去,一直到拿到一个确切的答案,然后顺着这条线再找回来,才得到最终alex的年龄。这个过程已经非常接近递归的思想。我们就来具体的我分析一下,这几个人之间的规律

 

4、aelx    46     # egon+2   4   age(4)=age(3)+2   

3、egon   44    #武sir+2         age(3)=age(2)+2

2、武sir    42    # 金鑫+2       age(2)=age(1)+2

1、金鑫     40   #               age(1)==40



def age(n):
    if n == 1:
        return 40
    else:
        return age(n-1)+2

print(age(4)

 

例二

 

二分查找:

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,69,72,76,82,83,88]

 

 

技术分享
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 l[mid] > num:
        search(num,l,start,mid-1)
    elif l[mid] < num:
        search(num,l,mid+1,end)
    elif l[mid] == num:
        print(mid,l[mid])     #print(mid)
search(66,l)
阶乘(没有返回值)

 

技术分享
def search(num,l,start=None,end=None):
    start = start if start else 0
    end = end if end len(l)-1
    mid = (end-start)//2+start
    if 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
print(search(66,l))
阶乘(有返回值)

例三:

 阶乘:n=7     7*6*5*4*3*2*1

def func(n):
    if n==1:
        return 1
    else:
        return n*func(n-1)
print(func(7))

 

例四:

 三级菜单:

 

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


def func(menu):
    while True:
        for k in menu:print(k)
        key = input(>>>)
        elif key ==q:return q
        elif key == b:break
            res=func(menu[key])
            if res==q:return q
func(menu)
三级菜单

 

python开发 随笔补充之递归函数与实例

标签:start   class   strong   ide   ret   src   开发   div   pre   

原文地址:http://www.cnblogs.com/bsxq/p/7485743.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!