python 3 中的斐波那契数列仅显示最终数字
Fibonacci series in python 3 displays only final number
我是 Python 的初学者,正在尝试递归打印斐波那契数列。当我尝试这个时,return 函数根本不打印,因此只打印我传递的参数。
代码如下:
def fibR(n):
if n == 1 or n ==2:
return (1)
return(fibR(n-1) + fibR(n-2))
print(fibR(5))
有人可以帮我把系列中的所有数字都弄出来吗?
执行此操作的低效方法是使用循环:
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))
一个基本的(但不简单)递归斐波那契解如下:
>>> def fib(num, first=0, second=1):
... if not num: return second
... return fib(num-1, second, first+second)
...
>>> fib(5)
8
您可以通过两种方式保存中间值:为它创建一个 list
和 append()
,或者让您的函数 return
一个 tuple
.
方法一:
>>> 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]
方法二:
>>> 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)
我是 Python 的初学者,正在尝试递归打印斐波那契数列。当我尝试这个时,return 函数根本不打印,因此只打印我传递的参数。
代码如下:
def fibR(n):
if n == 1 or n ==2:
return (1)
return(fibR(n-1) + fibR(n-2))
print(fibR(5))
有人可以帮我把系列中的所有数字都弄出来吗?
执行此操作的低效方法是使用循环:
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))
一个基本的(但不简单)递归斐波那契解如下:
>>> def fib(num, first=0, second=1):
... if not num: return second
... return fib(num-1, second, first+second)
...
>>> fib(5)
8
您可以通过两种方式保存中间值:为它创建一个 list
和 append()
,或者让您的函数 return
一个 tuple
.
方法一:
>>> 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]
方法二:
>>> 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)