1

我有一个关于 Ruby 循环的非常基本的问题。

编写的这个程序返回第 i 个素数 +1(即示例应返回 17)。我知道我可以简单地 return cand-1,但我想知道检查是否在循环底部找到答案while并且只有在没有找到答案时才增加的“Ruby 方式”是什么。

def ith_prime(i)
  pI = 0 # primes index
  divs = []
  cand = 2

  until pI == i do 
    if divs.find { |div| cand%div == 0 } == nil
        divs << cand
        pI += 1
    end
    cand += 1
  end
  cand
end

puts ith_prime(7)
> 18
4

1 回答 1

5

我使用loop而不是whileuntil大部分时间。这样我可以将退出条件放在循环中的任何位置。

我会这样写(如果我理解正确的话):

def ith_prime(i)
  pI = 0 # primes index
  divs = []
  cand = 2

  loop do
    unless divs.find { |div| cand%div == 0 }
      divs << cand
      pI += 1
    end

    break if pI == i

    cand += 1
  end

  cand
end
于 2013-01-07T19:22:48.850 回答