使用 For 循环的斐波那契数列 - 不明白循环

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

对Python非常陌生,我试图理解我如何得到正确的答案

编写代码:

  1. 计算并打印斐波那契数列的前 50 项。
  2. 打印每个术语和数字,如下所示:
term: 0 / number: 0
term: 1 / number: 1
term: 2 / number: 1
term: 3 / number: 2
term: 4 / number: 3
term: 5 / number: 5

我得到了正确的答案,但“其他”部分是如何工作的?

c = a + b
print(f'term: {term} / number: {c}')
a = b
b = c

有人可以向我解释一下上面的变量每次循环时如何变化吗?我不明白 c = 1 + 1 如何打印 c = 2 但之后如何打印 c = 3?

a = 1
b = 1
for term in range (50):
    if term <= 1:
        print(f'term: {term} / number: {term}')
    elif term == 2:
        print(f'term: {term} / number: 1')
    else:
        c = a + b
        print(f'term: {term} / number: {c}')
        a = b
        b = c
python loops fibonacci
2个回答
3
投票

正如您所指出的,我们第一次进行 else 部分时,我们应用以下作业:

c = a + b # <-- (1) + (1) = 2
a = b     # <-- (1)
b = c     # <-- (2)

因此,在第一次遍历 else 部分之后,b 是最近的斐波那契数(在本例中为 2),a 是之前的斐波那契数。 下次,我们将执行以下操作。

c = a + b # <-- (1) + (2) = 3
a = b     # <-- (2)
b = c     # <-- (3)

这样,b 已更新为下一个斐波那契数,a 已更新为 2,这最近的斐波那契数,但现在是之前的一个。

以这种方式,c始终是最新的斐波那契数,并且该值被分配给b以便在下一个循环中使用,并且b的值最终被分配给a。


顺便说一句,如果您将代码重构为以下任意内容,则可以避免使用 if/elif/else 块的逻辑:

a = 1
b = 1
print('term 0 / number: 0')
print('term 1 / number: 1')
print('term 2 / number: 1')

for term in range (3,50):
    c = a + b
    print(f'term: {term} / number: {c}')
    a = b
    b = c

或者,

a = 0
b = 1
for term in range (50):
    print(f'term: {term} / number: {a}')
    c = a + b
    a = b
    b = c

以下方法也适用并删除变量 c:

a = 0
b = 1
for term in range (50):
    print(f'term: {term} / number: {a}')
    (a, b) = (b, a+b)

1
投票

斐波那契数列

在数学中,斐波那契数(通常表示为 Fn )形成一个序列,即斐波那契数列,其中每个数字前两个数字的和。该序列通常从 0 和 1 开始,尽管有些作者从 1 和 1 开始序列,有时(如斐波那契)从 1 和 2 开始。从 0 和 1 开始,序列中的前几个值是:[1]

0、1、1、2、3、5、8、13、21、34、55、89、144。

因此我们可以看到,为了得到下一个数字,我们将前两个数字相加。

现在让我们试运行您的代码

a = 1
b = 1
for term in range (50):
    if term <= 1:
        print(f'term: {term} / number: {term}')
    elif term == 2:
        print(f'term: {term} / number: 1')
    else:
        c = a + b
        print(f'term: {term} / number: {c}')
        a = b
        b = c

前两行:-

a = 1
b = 1

指定系列中的第二个和第三个两个值。这样我们就可以使用它们来获取下一项。

然后在第三行:-

for term in range (50):

我们正在启动一个 for 循环,该循环将按照

range(50):
中的指定进行 50 次 注意:- 这控制系列打印的术语数量。将范围中的数字更改为您要打印的术语数。


下一个

if
声明:-

如果术语<= 1: print(f'term: {term} / number: {term}') this if statement deals with the condition for the first two terms. where the value of term is 0 and 1. we used the variable term which is in for loop in the print statement to print the term and its value.


elif
声明:-

elif 项 == 2: print(f'term: {term} / 数字: 1')

我们使用这个 elif 语句来打印第三项。因为我们需要第三项为 1 (0 + 1),所以我们使用 elif 语句将其硬输入到 print 语句中。


现在是您要求的 else 语句:

 else:
    c = a + b
    print(f'term: {term} / number: {c}')
    a = b
    b = c

这个 else 语句处理

4th term
及其后面的术语。

c=a+b

将按照斐波那契数列中的要求添加前两项

print(f'term: {term} / 数字: {c}')

这将打印术语和值。

那么,

a = b
b = c

更新值下学期。然后循环会以新值重新启动。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.