首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中将fibonacci序列打印到第n个数字?

如何在Python中将fibonacci序列打印到第n个数字?
EN

Stack Overflow用户
提问于 2013-04-05 03:59:23
回答 8查看 33.9K关注 0票数 7

我有一项家庭作业,我被难倒了。我正在试着写一个程序,输出斐波那契数列的第n个数字。这是我到目前为止所知道的:

代码语言:javascript
运行
复制
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)

我想我可以使用不同的函数,但是我不知道如何传递计算斐波那契数列的参数。然后,下一步是打印出直到该数字的数字序列。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-04-05 04:14:39

非递归解

代码语言:javascript
运行
复制
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))

生成器解决方案:

代码语言:javascript
运行
复制
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)

请注意,生成器解决方案优于非递归解决方案(如果不将记忆化应用于递归解决方案,则非递归解决方案优于递归解决方案)

再一次,使用记忆化的递归:

代码语言:javascript
运行
复制
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)

代码语言:javascript
运行
复制
fib_n = int(input("Fib number?"))
fibs = [fib(i) for i in range(fib_n)]
print " ".join(fibs) 

这将打印一行中的所有数字,并以空格分隔。如果您希望每一个都在自己的行上-请用"\n"替换" "

票数 17
EN

Stack Overflow用户

发布于 2013-04-05 04:08:19

代码语言:javascript
运行
复制
def fibonacci(n):
  if n <= 1:
    return n
  else:
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(int(input())))

由于您希望打印到n第th编号:

代码语言:javascript
运行
复制
[print(fibonacci(n)) for n in range (int(input()))]

对于python2.7,将input更改为raw_input

票数 6
EN

Stack Overflow用户

发布于 2013-04-05 04:01:37

请注意,在您的电话中

fib() recursively

  • You需要一个包装器方法,这样就不会在每次递归调用该方法时都请求输入

  • ,你不需要在列表中发送。仅数字n就足够了。

这个方法只会给出序列中的第n个数字。它不打印序列。

你需要return fib(n-1) + fib(n-2)

代码语言:javascript
运行
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15820601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档