Python 3 中的斐波那契数列仅显示最终数字

2024-10-17 08:26:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的初学者,尝试递归地打印Fibonacci级数。当我尝试这样做时,返回函数根本不打印,因此只打印我传递的参数。你知道吗

代码如下:

def fibR(n):
 if n == 1 or n ==2:
    return (1)
 return(fibR(n-1) + fibR(n-2))
print(fibR(5))

有人能帮我弄到这一系列的数字吗?你知道吗


Tags: or函数代码参数returnifdef数字
2条回答

基本(但不是简单的)递归斐波那契解如下:

>>> def fib(num, first=0, second=1):
...     if not num: return second
...     return fib(num-1, second, first+second)
...
>>> fib(5)
8

您可以通过两种方式保存中间值:创建一个listappend(),或者让函数return一个tuple。你知道吗

方法1:

>>> def fibl(num, first=0, second=1):
...     results.append(second)
...     if not num: return
...     return fibl(num-1, second, first+second)
...
>>> results = []
>>> fibl(5)
>>> results
[1, 1, 2, 3, 5, 8]

方法2:

>>> def fibr(num, first=0, second=1, *results):
...     if not num: return results+(second,)
...     return fibr(num-1, second, first+second, *(results + (second,)))
...
>>> fibr(5)
(1, 1, 2, 3, 5, 8)

低效的方法是使用循环:

def fibR(n):
    if n == 1 or n ==2:
        return 1
    return fibR(n-1) + fibR(n-2)

for i in range(1,6):
    print(fibR(i))

但是,这是低效的,因为它会多次计算下斐波那契数。可以使用数组存储中间斐波那契数并提高性能:

def fibR(n):
    if n > len(fibR.values) - 1:
        for i in range(len(fibR.values), n+1):
            fibR.values.append(fibR(i-2) + fibR(i-1))
    return fibR.values[n]

fibR.values = [0, 1, 1]
for i in range(1,6):
    print(fibR(i))

相关问题 更多 >