Python斐波那契系列

时间:2016-04-01 15:39:37

标签: python

我使用Python编写了斐波纳契系列。无法弄清楚为什么第二个程序给出了错误答案,而第一个程序看起来都是正确的。

以下程序给出正确答案

def fib(n):
  a,b=0,1
  while b<n:
    print b
    a,b=b,a+b

fib(4)
1
1
2
3

以下程序给出了错误答案:

def fib(n):
  a = 0
  b = 1
  while b<n:
    print b
    a = b
    b = a+b

fib(4)

1
2

9 个答案:

答案 0 :(得分:6)

在第一个中,a, b = b, a+b同时进行分配 在第二个问题中,您首先执行a = b,然后执行b = a+b实际上只是b = 2*b

如何在第二个中实现这种行为?使用临时值来存储a

def fib(n):
  a = 0
  b = 1
  while b<n:
    print b 
    temp = a
    a = b
    b = temp+b
fib(4)

>>>1
>>>1
>>>2
>>>3

答案 1 :(得分:2)

在python中使用lambda函数的fibonacci系列

n = int(input("Enter the range of numbers in fibonacci series:"))
F = [0,1]
list(map(lambda i: F.append(F[i-1] + F[i-2]), range(2, n)))
print(F)

答案 2 :(得分:2)

在python中使用列表推导功能的斐波那契数列

n = int(input("Enter the range of numbers in fibonacci series:"))
F = [0,1]
[F.append(F[i-1] + F[i-2]) for i in range(2,n)]
print(F)

答案 3 :(得分:1)

在第一个示例中,您已使用此代码:

a,b=b,a+b

在第二场比赛中,您已经完成了这项工作:

a = b
b = a+b

这些不是同样的事情。

为了论证,我们要说a = 3b = 6。让我们先运行工作代码:

>>> a, b = 10, a + 1
>>> a
10
>>> b
4

a + 1的值是4而不是11,因为b的分配正在使用a值,所以{ {1}}。

现在让我们将3 + 1 == 4a放回原点。让我们尝试另一种分配方法:

b

现在>>> a = 10 >>> b = a + 1 >>> a 10 >>> b 11 是11!这是因为b在分配a之前已分配,因此添加使用b&#39; s new 价值。

您的第二个版本无法正常工作的原因是因为分配不会同时发生,因此a实际上是b因为2 * b已经设置为a执行时b

答案 4 :(得分:1)

在发布的第二个代码中,您在更改a后重新定义了b的值,结果为

def fib(n):
  a = 0
  b = 1
while b<n:
  print b     #prints 1
  a = b       #a = 1
  b = a+b     #b = 1 + 1 = 2

在第二个代码中,没有问题,因为python代码通常从右到左读取方程式,因此首先重新定义b,正确

def fib(n):
    a,b=0,1    #a = 0, b = 1
while b<n:
    print b
    a,b=b,a+b  #b = 0 + 1 = 1, #a = 1

答案 5 :(得分:1)

def fibonacci (n):
    if n == 1 or n == 2:
        return 1
    return fibonacci (n-1) + fibonacci (n-2)

for i in range(1,50):
    print (fibonacci(i))

答案 6 :(得分:0)

n1 = 0
n2 = 1
c = 0

nTerms = int(input())

if nTerms <= 0:
    print("Enter the valid value")
elif nTerms == 1:
    print(a)
else:
    while c < nTerms:
        print(n1)
        nth = n1 + n2
        n1 = n2
        n2 = nth
        c += 1

答案 7 :(得分:0)

使用递归的斐波那契数列

def f_recursion(n):
    if n <= 1:
        return n
    else:
        return(f_recursion(n-1) + f_recursion(n-2))
# Driver Code
nterms = int(input())
if nterms <= 0:
    print("Enter the positive value")
else:
    for i in range(0,nterms):
        print (f_recursion(i))

答案 8 :(得分:0)

n1=int(input("Enter Term"))
mylist=[0,1]
for a in range(n1):
    sum=0
    for b in mylist[len(mylist)-2:]:
        sum+=b
    mylist.append(sum)
print(mylist)