lambda遞迴呼叫的一般方法

2022-07-02 20:45:06 字數 1169 閱讀 7704

普通遞迴呼叫,例如求階乘

def fact(n):

if n == 0:

return 1

else:

return n * fact(n - 1)

被遞迴函式需要乙個固定名稱,以期在函式中引用此名稱進行遞迴。那麼,如果單純使用lambda匿名函式,應如何實現遞迴。

以階乘為例,用lambda匿名函式遞迴可寫為

print(

(lambda n: \

(lambda f: f(f, n))

(lambda f, v: \

1 if v == 0 else v * f(f, v - 1)))

(10)

)

def neg(v, a):

if a == 1:

return v + 1

else:

v -= (1.0 / a)

return pos(v, a - 2)

def pos(v, a):

if a == 1:

return v + 1

else:

v += (1.0 / a)

return neg(v, a - 2)

def cal_pi(n):

if n % 2 == 0:

n += 1

if (n - 1) % 2 == 0:

return 4.0 * pos(0, n)

else:

return 4.0 * neg(0, n)

這個算圓周率的演算法,也可以用lambda遞迴表示

(lambda n: \

(lambda pos, neg: \

4.0 * pos(pos, neg, 0, n if n%2 == 1 else n+1)) \

((lambda pos, neg, v, k: \

v+1 if k == 1 else neg(pos, neg, v + (1.0/k), k-2)), \

(lambda pos, neg, v, k: \

v+1 if k == 1 else pos(pos, neg, v - (1.0/k), k-2))))(10000)

一般遞迴 尾遞迴 迴圈遞迴

階乘的一般遞迴 int factorial int n 階乘的尾遞迴 int factorial tail int n,int res 階乘的迭代形式 int factorial loop int n 斐波那契數列的一般遞迴 int fibonacci int n 斐波那契數列的尾遞迴 int fi...

學習筆記 求解簡單遞迴式的一般方法

手動部落格搬家 本文發表於20180618 15 53 06,原位址 咦我那時候不應該在準備期末考試嗎 一 求解 f n af n 1 b 解 f n af n 1 frac frac f n frac a f n 1 frac 同理 f n 1 frac a f n 2 frac f 2 frac...

新手程式設計的一般方法

剛畢業沒什麼經驗很多的知識都是要自己去學習。經過一年的工作經歷也總結出了一些對付臨時學習任務的經驗 1.拿到任務後盡量要求上司給出明確的任務說明。明白是做什麼?有沒簡單的方法?2.搜尋相關的資料,方法。找乙個最接近的例子。弄懂它。最好有幾個資源比較全的 3.再例子的基礎上新增新的功能。如果原來的例子...