簡體   English   中英

Python雙函數遞歸與迭代函數

[英]Python dual function recursive vs iterative function

基本上,與模型答案相比,我不確定我的答案有什么問題。 我在這里想要實現的是生成一個可以執行lambda x: f(g(f(g(f(g(f(x))))))) # for n == 7lambda x: f(g(f(g(x)))) # for n == 4

我嘗試過的

def dual_function(f, g, n):
    if n == 1:
        return f
    elif n % 2 == 0:
        return lambda x: dual_function(f,g, n-1)(g(x))
    else:
        return lambda x: dual_function(f,g, n-1)(f(x))
# the code seems to do the above from my understanding?
# it starts off at n == 7: new_x = f(x)
# n == 6: new_x = g(new_x)
# n == 5: new_x = f(new_x) 
# and so continues down...

模型答案(對不起,我得到了錯誤的模型答案以供參考,這是正確的答案,但現在兩者實際上都可以大聲笑)

    def dual_function(f,g,n):
    def helper(x):
        f1,g1 = f,g
        if n%2==0:
            f1,g1 = g1,f1
        for i in range(n):
            x = f1(x)
            f1,g1= g1,f1
        return x
    return helper

樣例

f = lambda x: x+1
g = lambda x: x/2
print(dual_function(f, g, 7)(1)) 
# correct answer is 0.9375, versus my wrong answer: 2.0

您的代碼和模型代碼似乎正在解決不同的問題。 您的代碼始終以f(...)作為最外層調用(並且最里面的調用會根據n是偶數還是奇數而變化)開始,而參考代碼始終以g(x)作為最內層調用(也是最外層調用g(x)電話可能會有所不同)。

因此,您的函數與n=7不匹配的原因是,您正在計算f(g(f(g(f(g(f(x)))))))而另一個函數正在執行g(f(g(f(g(f(g(x))))))) 不幸的是,我無法告訴您實際上應該計算的是哪一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM