Python:我的递归如何更新我用来记忆的列表?

问题描述

我正在使用通常的斐波那契函数在递归中练习记忆。在我的第一次尝试中,我想到了这个:

def memFib(n,memo = [0,1]):
    if n < 2:
        return n
    elif n > len(memo) - 1:
        memo.append(memFib(n - 1,memo) + memFib(n - 2,memo))
    return memo[n]

在这代码中,我使用认参数设置了第二个参数,以传递记忆值并绕过我可能从递归中获得的任何范围问题。在我的第二次尝试中,我想减少原始代码的递归调用次数,并且不使用参数来绕过范围界定问题,这是我能想到的最好的方法

def memFib2(n,1]):
    if n < 2:
        return n
    else:
        if (n - 1) > len(memo) - 1:
            memFib2(n - 1,memo)
        memo.append(memo[n - 1] + memo[n - 2])
    return memo[n]

如您所见,在我的第二次尝试中,我成功减少了递归调用数量,但仍未弄清楚如何解决我的记忆化递归所涉及的范围界定问题。最初,第二次尝试没有第二个参数,并且 memo = [0,1] 在定义函数之后且在 if 语句,但代码引发了 IndexError ,因此我将其修改为当前的状态以使其正常工作。

我的问题是,第二次尝试如何更新列表 备忘录 ?在我的第一次尝试中,我了解了这种情况的发生,因为递归发生在 .append() 方法内部,因此增加 memo > ,因为它来自递归。但是,在我的第二次尝试中情况并非如此,因为第二次尝试从递归中出来时,它仅返回附加在 memo 中的最新元素,但是由于递归发生在 .append() 方法我不明白 备忘录 的更新值是如何传递的的递归。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)