函数编程在递归过程中的应用

时间:2016-10-23 13:24:33

标签: python recursion functional-programming

这段简单的代码完美无缺。我要问的是完全没必要的;但是,我正在尝试更多地了解函数式编程方法。

p=[0, 1, 0, 0, 0]
pHit = 0.6
pMiss = 0.2
pExact = 0.8
pOvershoot = 0.1
pUndershoot = 0.1


def move(p, U):
    q = []
    # A functional approach could be used here as well, but focusing on the outer loop at the moment.
    for i in range(len(p)):
        s = pExact * p[(i-U) % len(p)]
        s = s + pOvershoot * p[(i-U-1) % len(p)]
        s = s + pUndershoot * p[(i-U+1) % len(p)]
        q.append(s)
    return q

#Instead of this for loop here, is there a more functional approach to doing the same thing?
for i in range(0,1000):
    p = move(p,1)

print move(p,1)

这个人提出了类似的问题,但区别在于他/她正在将递归函数应用于迭代的实际对象。 Using recursion with map in python

我的情况似乎有所不同,因为我没有迭代我正在应用递归函数的对象(列表“p”)。 “for循环”处理得非常好,因为我想做递归操作范围(0,1000)次,但我已经看到这个问题现在出现了几次,我对看到函数式编程非常感兴趣解决这个问题。

我曾尝试使用reduce()几次,但我发现很难将X迭代的输出传递给X + 1迭代。

1 个答案:

答案 0 :(得分:3)

要替换底部的循环,您可以执行以下操作:

reduce(lambda q,_: move(q, 1), range(1000), p)

请注意,范围的值从未被使用过,因此使用_表示它们无关紧要。

缩减会自动将move的结果传递给下一次迭代。