1. 程式人生 > >python開發 隨筆補充之遞歸函數與實例

python開發 隨筆補充之遞歸函數與實例

closed code hid 遞歸函數 span art inpu 但我 重要

遞歸函數

遞歸函數的定義:

  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開發 隨筆補充之遞歸函數與實例