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 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配