繁体   English   中英

Python 斐波那契数列

[英]Python fibonacci series

我使用 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

在第一个中, 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

在发布的第二个代码中,您在更改 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

在python中使用lambda函数的斐波那契数列

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)

在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)

在第一个示例中,您使用了以下代码:

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值,所以3 + 1 == 4

现在让我们将ab放回它们的初始值。 让我们尝试另一种分配方法:

>>> a = 10
>>> b = a + 1
>>> a
10
>>> b
11

现在b是 11! 那是因为a在赋值之前被赋值了b ,所以加法使用a值。

你的第二个版本不工作的原因是因为分配不会同时发生,所以b实际上是2 * b因为a执行a+ba+b已经被设置为b

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))
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

使用递归的斐波那契数列

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))
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)
def fib(n):
    a=0
    b=1
    sum=0
    for i in range(0,n):
        print(sum)
        sum = a + b 
        b = a
        a = sum
fib(10) // here you can add any n value from 1 to 100 
# The below code will generate the fibonacci series as per desired range
# just put the number, you want the fibonaci series upto.

def fibonacci(num):
    x,y = 0,1
    if num==1:
        print(x)
    elif num==2:
        print(x,y)
    else:
        print(x,y,end = " ")
        for i in range(num-2):
            z=x+y
            x=y
            y=z
            print(z,end = " ")
def fib(n1, n2):
    print(n1)
    print(n2)
    for i in range(n1, n2):
        n1 += n2
        n2 += n1
        print(n1)
        print(n2)

starting_number = int(input('Enter First Term: '))
ending_number = int(input('Enter Second Number: '))
fib(starting_number, ending_number)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM