Python 斐波那契难以理解 a、b = b、a +b

问题描述 投票:0回答:2

亲爱的会员我有一个疑问,我从以下理解这个概念:

https://stackoverflow.com/a/21990958/22419694 Python a, b = b, a +b

但是如果我们这样编写程序怎么办?

n=int(input("Enter a number"))
def fibo(n):
    b=1
    a=0
    for i in range (n+1):
        print(a)
        b=a+b # b =0+1 ( a is not yet initialized to 1)which makes   b=1
        a=b   # and then b is initialized with 'a' as per my logic so, a=1
print(fibo(n))

请帮忙

我正在尝试执行斐波那契数列,但仍然无法获得所需的结果,即 n=5 的斐波那契数列 0,1,1,2,3,5... 相反,结果是 = 0,1,2,4,8

python fibonacci basic
2个回答
0
投票

在你的代码中
b=a+b -> 这里新的“b”值设置为先前的“a”值+先前的“b”值。
a=b -> 并且将上一步中分配的新“b”值分配为新的“a”值,而不是设置先前的“b”值。这是错误的。

尝试下面的代码

n=int(input("Enter a number"))
def fibo(n):
    a=0
    b=1
    for i in range (n+1):
        print(a)
        c = a # to store previous a value
        a = b # assign the previous b to the new a 
        b = c + b # assign previous a + previous b to new b                  
fibo(n)

输出

Enter a number5
0
1
1
2
3
5

0
投票

斐波那契数列:0, 1, 0+1, (0+1)+1, (0+1) + ((0+1)+1)
变量:a、b、a+b、(a+b)+b、(a+b) + ((a+b)+b)
简化:a、b、(a+b)(或 c)、(c+b)(或 d)、d+c

a
的值传递给
b
并且
b
设置为
a+b

  • 第1步:a=0,b=1,输出:0
  • 第2步:a=,b=1,输出:1
  • 第3步:a=1,b=2,输出:1
  • 第4步:a=2,b=3,输出:2
  • 第5步:a=3,b=5,输出:3

您的代码:

n=int(input("Enter a number"))
def fibo(n):
    b=1
    a=0
    for i in range (n+1):
        #when i=3
        print(a) # 2 
        b=a+b # 2+2
        a=b # 4
print(fibo(n))

你的代码是做什么的: 将 b 设置为

a+b
a+b
值与
a

相同
  • 第0步:a=0,b=1 输出:0
  • 第1步:a=1,b=1,输出:1
  • 第2步:a=2,b=2,输出:2
  • 第3步:a=4,b=4,输出:4
  • 第4步:a=8,b=8,输出:8
  • 第5步:a=16,b=16,输出:16

对于交换,您必须有

temp
变量,就像经典方式一样

temp = a + b # 1+2
a = b # 2
b = temp # 3

或Pythonic方式来实现:

a, b = b, a+b
© www.soinside.com 2019 - 2024. All rights reserved.