在Python中生成Fibonacci系列

时间:2016-08-30 10:21:31

标签: python-3.x

我想简单地在Python中生成fibonacci系列。但不知怎的,我没有看到正确的系列。例如,如果我输入3,那么正确的答案应该与系列一起出现:1 1 2 3

以下是我的代码。有人可以指出这有什么问题:

def genfibonacci(no):
    if no <= 1:
        return no
    else:
        sum = genfibonacci(no - 1) + genfibonacci(no - 2)
    print (sum)
    return(sum)

number = int(input())
genfibonacci(number)

提前致谢。

4 个答案:

答案 0 :(得分:0)

有很多方法可以计算python中的斐波纳契数据。

示例1:使用循环技术

def fib(n):
 a,b = 1,1
 for i in range(n-1):
  a,b = b,a+b
 return a
print fib(5)

示例2:使用递归

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

示例3:使用生成器

a,b = 0,1
def fibI():
 global a,b
 while True:
  a,b = b, a+b
  yield a
f=fibI()
f.next()
f.next()
f.next()
f.next()
print f.next()

示例4:使用memoization

def memoize(fn, arg):
 memo = {}
 if arg not in memo:
  memo[arg] = fn(arg)
  return memo[arg]

fib(),如例1所示。

fibm = memoize(fib,5)
print fibm

示例5:使用memoization作为装饰器

class Memoize:
 def __init__(self, fn):
  self.fn = fn
  self.memo = {}
 def __call__(self, arg):
  if arg not in self.memo:
   self.memo[arg] = self.fn(arg)
   return self.memo[arg]

@Memoize
def fib(n):
 a,b = 1,1
 for i in range(n-1):
  a,b = b,a+b
 return a
print fib(5)

答案 1 :(得分:0)

问题的一部分是在计算时打印(除了no&lt; = 1) 如果我们删除了打印件,只显示您得到的结果,这将有所帮助:

def genfibonacci(no):
    if no <= 1:
        sum = no
    else:
        sum = genfibonacci(no-1) + genfibonacci(no-2)
    return sum

>>> [genfibonacci(i) for i in range(4)]
[0, 1, 1, 2]
>>> [genfibonacci(i) for i in range(5)]
[0, 1, 1, 2, 3]

此范围从0开始,因此您可以根据需要删除它。

因为对于说4的genfibonacci将调用32和2,而后者将调用2和1,所以您拥有的print语句将多次出现相同的数字。 no&lt; = 1。

完全没有

答案 2 :(得分:0)

最简单的斐波那契数列出现在这里:

#Fibonacci series in Short Code

#initilize the base list
ls2=[0,1]

#user input: How many wants to print
c=int(input('Enter required numbers:'))

#fibonacci Function to add last two elements of list
ls2.extend((ls2[i-1]+ls2[i-2]) for i in range(2,c))

#This will print recuired numbers of list
print(ls2[0:c])

如果要创建函数,则:

#Fibonacci series in Short Code

#initilize the base list
ls2=[0,1]
#user input: How many wants to print
c=int(input('Enter required numbers:'))

#fibonacci Function to add last two elements of list
def fibonacci(c):    

    ls2.extend((ls2[i-1]+ls2[i-2]) for i in range(2,c))    
    #This will print required numbers of list
    print(ls2[0:c])

fibonacci(c)

答案 3 :(得分:0)

斐波那契在 Python 中使用递归函数:

def fibonacci(n, fib1=0, fib2=1):
  if n<=1:
    print(fib1)
    return 
  else:
    print(fib1)
    fib = fib1 + fib2
    fib1 = fib2
    fib2 = fib
    fibonacci(n - 1, fib1, fib2)

number = int(input())
fibonacci(number)