【问题标题】:Fibonacci sequence: can understand the code [closed]斐波那契数列:可以看懂代码[关闭]
【发布时间】:2015-03-08 21:34:09
【问题描述】:

斐波那契数列是 1, 1, 2, 3, 5, 8, ... 前两个元素是 1。每个连续的元素是前两个元素的和。

我无法理解下面的代码。我知道i1, i2 = i2, i1+i2 会返回1, 1, 2, ...,但它怎么会返回..., 3, 5, 8, ...i1, i2 = 1, 1 已指定;这个3 来自哪里?如果我理解了这一点,我想我会明白为什么会变成5, 8, ...

def fib_to(max)
  i1,i2 = 1,1
  while i1 <= max
    yield i1
    i1, i2 = i2, i1+i2
  end
end

fib_to(100) do |f| 
  #yeild(i1) is replaced by this |f|?
  puts f
end

结果

1
1
2
3
5
8
13
21
34
55
89

【问题讨论】:

  • 你知道什么是斐波那契数列吗?
  • @sawa 让我们尽量记住语气。

标签: ruby yield


【解决方案1】:

试着想想i1i2 中存储了哪些数字,以及它们在每一步中会发生什么。在每一步,i2 的值都会被覆盖到i1,而i2 中存储的值会增加i1 中存储的值。在每一步,您都返回存储在i1 中的值。

你从1, 1开始(返回1),然后你得到1, 2(返回1),然后你得到2, 3(返回2),然后你得到3, 5(返回3)等等。

【讨论】:

  • 这是我看不懂的部分!!您说值存储在“i1”中,但是这段代码在哪里?你从 1, 1 开始(并返回 1),但接下来你会得到“1, 1, 2”,因为代码是“i1, i2 = i2, i1+i2”??为什么这个“i1”会变成“2,3,5...”??
  • @macjeans 当阿萨德说“你得到 1,1”和“你得到 1,2”之类的话时,他的意思是“i1 将是 1,i2 将是 1”和“i1 将是 1”和 i2 将分别为 2"。当你说“但接下来你会得到 1、1、2”时,不清楚你的意思是什么——只有两个变量,每个变量一次只包含一个值。所以你他们不能一起拥有三个值。
  • 为我的坏问题道歉。我不明白的部分是 Asad 所说的,“在每一步,i2 的值都会被覆盖到 i1 中,并且存储在 i2 中的值会增加存储在 i1 中的值。”这个代码在哪里?代码 "i1, i2 = i2, i1+i2" => "1, 1, 2",对吧?
  • @macjeans The CODE "i1, i2 = i2, i1+i2" =&gt; "1, 1, 2", right? 我不明白你的意思。 =&gt; 应该表示什么?这个方向箭头和你不断重复的三个值对我来说没有任何意义。一个变量只能有一个值。你有两个变量,它们总共只能有两个值。
  • @macjeans 我会尝试再次解释这一点。有两个变量:i1i2。最初,它们分别被赋予11 的值。这是使用函数中的第一行完成的:i1,i2 = 1,1。稍后,您开始循环,并且在循环的每次迭代中,i1i2 的值分别为 i2i1 + i2。这是使用代码完成的:i1, i2 = i2, i1+i2.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
相关资源
最近更新 更多