(011)我們一起學Python;匿名函式,遞迴函式

雪山斐胡發表於2018-06-23

lambda關鍵字,匿名函式,具有簡潔的表達方式,適合做一次性運算,系統會自動回收。

>>> pao = lambda x : x * x + 5

>>> pao(2)

9

>>> gg = lambda x,y : x*y        #支援多個引數
>>> gg(3,8)

24

filter過濾器函式,輸出真的值,第一個引數可以是函式也可以是None

>>> list(filter(lambda x: x % 2 + 1,range(20)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> list(filter(lambda x: (x +1) % 2 ,range(20)))

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

map函式,相當於一個對映函式,把輸入值依次放進map函式的作用域去執行。

遞迴函式是人妻,呼叫自身,必須要回來。

def factorrial(n):
    result = n
    for x in range(1,n):
        result *= x
    return result

def fac(n):
    if n == 1:
        return 1
    else:
        return n * fac(n-1)

number = int(input("請輸入一個正整數:\n"))
re = factorrial(number)
print("經典函式%d 的階乘是 %d\n" % (number,re)) 
re = fac(number)
print("遞迴函式%d 的階乘是 %d" % (number,re))

輸出結果:

請輸入一個正整數:

5
經典函式5 的階乘是 120

遞迴函式5 的階乘是 120

斐波那契數列的遞迴實現:

def fibonaqi(n):
    if n == 1 or n==2:
        return 1
    else :
        return fibonaqi(n-1) + fibonaqi(n-2)

a = int(input("請輸入一個正整數:\n"))
re = fibonaqi(a)
print("%d 的fibonaqi數列用遞迴演算法實現的值為:%d\n" % (a,re))
list1=[]
#如果在fibonaqi函式中沒有定義0的輸入
#千萬要注意他的輸入中不能有0

for i in range(1,a+1):
    list1.append(fibonaqi(i))  
print("fibonaqi數列為:",list1)

輸出:

請輸入一個正整數:
20
20 的fibonaqi數列用遞迴演算法實現的值為:6765


fibonaqi數列為: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]

漢諾塔遊戲的實現,輸入64的話能跑半天!!!輸入128是很刺激的

def hanoi(n,x,y,z):
    if n == 1:
        print(x,"-->",z)
    else:
        hanoi(n-1,x,z,y)
        print(x,"-->",z)
        hanoi(n-1,y,x,z)
n = int(input("請輸入漢諾塔的層數:"))
hanoi(n,'A','B','C')










相關文章