关于斐波那契数列/while循环/函数,为什么这个函数的结果会是144
B站第50讲了,在学递归函数。里面的一个函数不是很理解,来请教大家。按照我的理解,当n>2的时候, c = a + b. 在while循环里面, n的取值先后为12, 11, 10......3。c=a + b,因为a和b的初始值都是1, 那么c的初始值就是2。从n=3算起,当n=9的时候c就已经是128了,但是最终结果为什么是144呢?谢谢大家!
代码如下:
>>> def fiberIter(n):
... a = 1
... b = 1
... c = 1
... while n > 2:
... c = a + b
... a = b
... b = c
... n -= 1
... return c
...
>>> fiberIter(12)
144
哈哈,欢迎来到“斐波那契的神秘之旅”!别担心,让我用通俗易懂的语言把这个函数讲清楚。
首先,斐波那契数列的定义是这样的:从第三个数开始,每个数都是前两个数之和。也就是说,F(1) = 1, F(2) = 1, F(3) = 1 + 1 = 2, F(4) = 1 + 2 = 3, F(5) = 2 + 3 = 5……以此类推。
现在,我们来看你的代码:
def fiberIter(n):
a = 1# F(1)
b = 1# F(2)
c = 1# F(3)
while n > 2:
c = a + b# c = F(n) = F(n-1) + F(n-2)
a = b # 更新 a 为 b,即对应到下一个数
b = c # 更新 b 为 c,准备计算下一个数
n -= 1 # 每次循环减少计算的数字
return c
### 解析过程:
1. 初始化时,`a` 和 `b` 都是1(即F(1)和F(2)),`c` 也设置为1(将来会被更新为 F(3))。
2. 当`n`大于2时,循环开始:
- 第一次循环:`c = a + b = 1 + 1 = 2` (即F(3)),接着`a`变为1,`b`变为2。
- 第二次循环:`c = a + b = 1 + 2 = 3` (即F(4)),接着`a`变为2,`b`变为3。
- 第三次循环:`c = a + b = 2 + 3 = 5` (即F(5)),接着`a`变为3,`b`变为5。
- 依此类推,直到`n`减到2。
### 为什么最后结果是144?
当你调用`fiberIter(12)`时,函数会在循环中进行如下计算:
- F(3) = 2
- F(4) = 3
- F(5) = 5
- F(6) = 8
- F(7) = 13
- F(8) = 21
- F(9) = 34
- F(10) = 55
- F(11) = 89
- F(12) = 144
最终,`c`在`n`减到2的时候就达到了144,这就是F(12)。
所以,你追溯到`n=3`的计算时,确实会感觉到混淆,但实际上它是一直在按照斐波那契的规则在算的!希望这些解释让你更清楚斐波那契数列的奥秘了!如果还有什么问题,随时问我哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 n=12时,c=2,a=1,b=2,n自减1
n=11时,c=3,a=2,b=3,(因为先执行的c=a+b语句,这时a等于1,b等于2)
n=11,c=5,a=3,b=5
以此类推……
…………(省略)
n=3时,c=144,a=89,b=144
建议你像这样先举几个例子,让n值为5,自己再算算就明白了 本帖最后由 jackz007 于 2024-8-9 22:43 编辑
def fiberIter(n):
x , e = [] , 0
for k in range(n) :
if k < 2 :
x . append(e)
e += 1
else :
x . append(x + x)
return x
fiberIter(12)
斐波那契数列的第 1、2 项是 0,1。144 是第 13 项的值(55 + 89 = 144)。
三体人的智子 发表于 2024-8-9 18:42
n=12时,c=2,a=1,b=2,n自减1
n=11时,c=3,a=2,b=3,(因为先执行的c=a+b语句,这时a等于1,b等于2)
n=11,c= ...
好的,非常感谢。虽然还没有完全明白,但是大概的思路有了。 jackz007 发表于 2024-8-9 22:34
斐波那契数列的第 1、2 项是 0,1。144 是第 13 项的值(55 + 89 = 144)。
好的,非常感谢,您提供了另外一个思路,虽然看不大懂。
页:
[1]