【发布时间】:2017-07-22 00:43:03
【问题描述】:
您好,我是 python 的新手,我尝试创建一个斐波那契计算器函数,该函数可以打印到给定数字的所有值,如果输入的数字不在序列中,那么它将下一个斐波那契数字添加到列表中。例如,如果输入 10,它应该返回 [0, 1, 1, 2, 3, 5, 8, 13]。该函数必须是递归的。这是我当前的代码:
def fibonacci(n):
n = int(n)
# The nested sub_fib function computes the Fibonacci sequence
def sub_fib(n):
if n < 2:
return n
else:
return (sub_fib(n-1) + sub_fib(n-2))
#This aspect of the main fib function applies the condition if the number
# input is not in the sequence then it returns the next value up
fib_seq= [sub_fib(i) for i in range(0,n) if sub_fib(i)<=n]
if fib_seq[-1] < n:
fib_seq.append(fib_seq[-1] + fib_seq[-2])
return fib_seq
else:
return fib_seq
print(fibonacci(input("Input a number to print sequence up to: ")))
我已经设法让它工作,但它非常慢(我假设是由于递归)无论如何我可以在不大规模更改程序的情况下加快它的速度吗?
【问题讨论】:
-
那是因为它是递归的,不使用记忆...递归真的是一个要求吗?
-
@WillemVanOnsem,无需记忆 - 足以将 sub_fib 重新定义为生成器。
-
@volcano:在这种情况下,让它递归是非常没用的。
-
@WillemVanOnsem,哎呀,错过了这一点
标签: python performance recursion fibonacci