nozawa 2010-03-28 20:03
浏览 170
已采纳

Programming Ruby 里面47页有关的迭代计算和我的理解不一样,请问原因何在呢?(新手,请多指教)

我在日本东京,有很多不便,还请多多指教。

def fib_up_to(max)
i1, i2=1, 1

while i1 <= max
yield i1
i1, i2 = i2, i1+i2 # [color=red]这里应该等于 i1 = i2 and i2 = (i1 + i2) 吧?[/color]

end
end
fib_up_to(1000) {|f| print f, "" } #[color=red]这里的f应该指的就是 i1 吧?[/color]

运行的结果是

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

但是按照我的理解,迭代的结果应该是

第一次 i1 = 1 i2 = 1
第二次 i1 = (i2 == 1) i2 = (i1 + i2 == 2)
第三次 i1 = (i2 == 2) i2 = (i1 + i2 == 2 + 2 == 4)
第四次 i1 = (i2 == 4) i2 = (i1 + i2 == 4 + 4 == 8)
......

所以我认为答案应该是(对i1的迭代输出):
1 1 2 4 8 16 .....

我的理解错在哪里呢?

  • 写回答

2条回答 默认 最新

  • xenocide 2010-03-28 21:14
    关注

    嗯,并行赋值是一步操作,和分开赋值是不同的。

    a, b = b, a+b

    相当于:

    a, b = [b, a+b]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大