-3

大家好,我是 ruby​​ 新手,我正在尝试实现算法以使用堆栈找到最大公约数:

这是我的代码:

def d8(a,b)
  return a if (a==b)
  s = Stack.new
  s.push(b)
  s.push(a)

  c1 = s.pop(a)
  c2 = s.pop(b)

  while c1!=c2
    if s.count>0
      c1 = s.pop(c1)
      c2 = s.pop(c2)
    end

    if c1== c2
      return c1
    elsif c1>c2
      c1 = c1-c2
      s.push(c2)
      s.push(c1)
    else
      c2 = c2 -c1
      s.push(c2)
      s.push(c1)
    end
  end
  return nil
end

但是,我不断收到 Argument Error: wrong number of arguments (1 for 0) 来自第 7 行

4

1 回答 1

3

Stack#pop方法可能没有参数,所以它应该是:

c1 = s.pop
c2 = s.pop
于 2013-10-04T09:41:59.533 回答