我有一项家庭作业,我被难倒了。我正在试着写一个程序,输出斐波那契数列的第n个数字。这是我到目前为止所知道的:
def fib():
n = int(input("Please Enter a number: "))
if n == 1:
return(1)
elif n == 0:
return(0)
else:
return (n-1) + (n-2)
mylist = range[0:n]
print(mylist)
我想我可以使用不同的函数,但是我不知道如何传递计算斐波那契数列的参数。然后,下一步是打印出直到该数字的数字序列。
发布于 2013-04-05 04:14:39
非递归解
def fib(n):
cur = 1
old = 1
i = 1
while (i < n):
cur, old, i = cur+old, cur, i+1
return cur
for i in range(10):
print(fib(i))
生成器解决方案:
def fib(n):
old = 0
cur = 1
i = 1
yield cur
while (i < n):
cur, old, i = cur+old, cur, i+1
yield cur
for f in fib(10):
print(f)
请注意,生成器解决方案优于非递归解决方案(如果不将记忆化应用于递归解决方案,则非递归解决方案优于递归解决方案)
再一次,使用记忆化的递归:
def memoize(func):
memo = dict()
def decorated(n):
if n not in memo:
memo[n] = func(n)
return memo[n]
return decorated
@memoize
def fib(n):
#added for demonstration purposes only - not really needed
global call_count
call_count = call_count + 1
#end demonstration purposes
if n<=1:
return 1
else:
return fib(n-1) + fib(n-2)
call_count = 0 #added for demonstration purposes only - not really needed
for i in range(100):
print(fib(i))
print(call_count) #prints 100
这一次,每个fibbonacci数只计算一次,然后存储。因此,此解决方案的性能将优于所有其他解决方案。然而,装饰器的实现只是快速和肮脏,不要让它进入生产。(有关this amazing question装饰器的详细信息,请参阅python on SO :)
所以,定义了fib
之后,程序应该是这样的(对不起,只是循环很无聊,这里有一些更酷的python东西:list comprehensions)
fib_n = int(input("Fib number?"))
fibs = [fib(i) for i in range(fib_n)]
print " ".join(fibs)
这将打印一行中的所有数字,并以空格分隔。如果您希望每一个都在自己的行上-请用"\n"
替换" "
发布于 2013-04-05 04:08:19
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(int(input())))
由于您希望打印到n
第th编号:
[print(fibonacci(n)) for n in range (int(input()))]
对于python2.7,将input
更改为raw_input
。
发布于 2013-04-05 04:01:37
请注意,在您的电话中
fib() recursively
这个方法只会给出序列中的第n个数字。它不打印序列。
你需要return fib(n-1) + fib(n-2)
def f():
n = int(input("Please Enter a number: "))
print fib(n)
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1)+fib(n-2)
https://stackoverflow.com/questions/15820601
复制相似问题