求第n个Fibonacci数代码中temp、cur、prev变量作用咨询
斐波那契代码中temp、cur、prev变量的工作机制解析
先明确三个变量的初始含义:
prev:初始值为0,对应斐波那契数列的第0项(F₀=0)cur:初始值为1,对应斐波那契数列的第1项(F₁=1)temp:临时存储变量,用来中转数据,避免计算时覆盖需要保留的值
循环内的执行逻辑(以求第5项斐波那契数为例)
当n=5时,循环会执行4次(i从1到4,满足i < 5),每一步的变量变化如下:
初始状态:prev=0,cur=1
第1次循环(i=1)
temp = cur→ 把当前cur的值(1)存到temp里cur = cur + prev→ 计算新的cur:1+0=1(对应F₂)prev = temp→ 把temp里保存的旧cur值(1)赋值给prev,此时prev变为F₁
状态更新:prev=1,cur=1
第2次循环(i=2)
temp = cur→ 暂存当前cur的值(1)cur = cur + prev→ 计算新cur:1+1=2(对应F₃)prev = temp→ 把旧cur值(1)赋值给prev,此时prev变为F₂
状态更新:prev=1,cur=2
第3次循环(i=3)
temp = cur→ 暂存当前cur的值(2)cur = cur + prev→ 计算新cur:2+1=3(对应F₄)prev = temp→ 把旧cur值(2)赋值给prev,此时prev变为F₃
状态更新:prev=2,cur=3
第4次循环(i=4)
temp = cur→ 暂存当前cur的值(3)cur = cur + prev→ 计算新cur:3+2=5(对应F₅)prev = temp→ 把旧cur值(3)赋值给prev,此时prev变为F₄
最终返回cur=5,也就是第5项斐波那契数
为什么需要temp变量?
斐波那契数列的核心递推公式是Fₙ = Fₙ₋₁ + Fₙ₋₂,代码里cur代表当前要计算的项,prev代表前前项。如果没有temp,直接执行cur = cur + prev,原来的cur值(下一次循环需要的prev值)会被覆盖,之后给prev赋值时拿到的是更新后的cur,会打破递推关系导致计算错误。temp的作用就是临时保存旧的cur值,确保更新cur后,能把正确的旧值传给prev,让每一步递推都符合斐波那契数列的规则。
内容的提问来源于stack exchange,提问作者Thakur Saad
相关产品推荐
相关产品推荐

