Python双函数递归与迭代函数

时间:2019-03-27 06:27:13

标签: python

基本上,相对于模型答案,我不确定我的答案有什么问题。 我在这里想要实现的是产生一个可以执行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

1 个答案:

答案 0 :(得分:2)

您的代码和模型代码似乎正在解决不同的问题。您的代码始终以f(...)作为最外层调用(并且最里面的调用会根据n是偶数还是奇数而变化),而参考代码始终以g(x)作为最内层调用(而且最外部的调用可能会有所不同)。

因此,您的函数与n=7不匹配的原因是,您正在计算f(g(f(g(f(g(f(x))))))),而另一个函数在进行g(f(g(f(g(f(g(x)))))))。不幸的是,我无法告诉您您实际上应该在计算哪些。