Python 此斐波那契代码中的列表索引超出范围错误

Python 此斐波那契代码中的列表索引超出范围错误,python,Python,如果我运行这个代码 def fib(n): if n == 1: return [1] if n == 2: return [1, 1] else: return fib(n - 1).append(fib(n - 1)[n - 1] + fib(n - 2)[n - 2]) print fib(3) 我收到一个错误,列表索引超出范围。您不能在返回中追加。此外,在append语句中出现了off by 1错误,导致索引超

如果我运行这个代码

def fib(n):
    if n == 1:
        return [1]
    if n == 2:
        return [1, 1]
    else:
        return fib(n - 1).append(fib(n - 1)[n - 1] + fib(n - 2)[n - 2])


print fib(3)

我收到一个错误,列表索引超出范围。

您不能在
返回中追加。此外,在
append
语句中出现了off by 1错误,导致索引超出范围错误。如果您将前面的答案存储在一个列表中,我称之为
fiblist
,那么您可以附加到该列表中,然后返回它

此代码生成您想要的答案:

def fib(n):
        if n == 1:
            return [1]
        if n == 2:
            return [1, 1]
        else:
          fiblist = (fib(n - 1))
          fiblist.append(fib(n - 1)[n - 2] + fib(n - 2)[n - 3])
          return fiblist

print(fib(3))

您不能在
返回中追加
。此外,在
append
语句中出现了off by 1错误,导致索引超出范围错误。如果您将前面的答案存储在一个列表中,我称之为
fiblist
,那么您可以附加到该列表中,然后返回它

此代码生成您想要的答案:

def fib(n):
        if n == 1:
            return [1]
        if n == 2:
            return [1, 1]
        else:
          fiblist = (fib(n - 1))
          fiblist.append(fib(n - 1)[n - 2] + fib(n - 2)[n - 3])
          return fiblist

print(fib(3))
返回fib(…).append(…)
将返回
None
,即使
fib(…)
是有效列表。
返回fib(…).append(…)
将返回
None
,即使
fib(…)
是有效列表。