首页 文章

使用ruby中的递归生成一系列素数

提问于
浏览
1

我试图在ruby中生成一个完整的nos b / w 1-100列表 . 我最初通过一种效果很好的迭代方法完成了这项工作 .

require 'prime'

def Primenos(n)
 Prime.prime?(n)
end

def f1
  (1..100).collect do |e|
    if Primenos(e)
      then p "this is prime - #{e}"
    end
  end
end

f1

但我还想知道这是否可以递归完成?任何的想法?

2 回答

  • 0

    你可以修改你的函数来接收一个值为1的默认参数 n ,从你的范围( (1..100) )开始,然后在方法内,如果 n 等于或大于100则返回,之后,使用 p 打印素数编号,再次调用 f1 ,这次将 n 加1:

    require 'prime'
    
    def f1(n = 1)
      return if n >= 100
    
      p "this is prime - #{n}" if Prime.prime?(n)
      f1(n + 1)
    end
    
    p f1
    # "this is prime - 2"
    # "this is prime - 3"
    # "this is prime - 5"
    # "this is prime - 7"
    # "this is prime - 11"
    # "this is prime - 13"
    # "this is prime - 17"
    # "this is prime - 19"
    # "this is prime - 23"
    # "this is prime - 29"
    # "this is prime - 31"
    # "this is prime - 37"
    # "this is prime - 41"
    # "this is prime - 43"
    # "this is prime - 47"
    # "this is prime - 53"
    # "this is prime - 59"
    # "this is prime - 61"
    # "this is prime - 67"
    # "this is prime - 71"
    # "this is prime - 73"
    # "this is prime - 79"
    # "this is prime - 83"
    # "this is prime - 89"
    # "this is prime - 97"
    # nil
    
  • 0

    其他选择:

    require 'prime'
    def primes_smaller_than(num, res=[])
      return res if num < 2
      res << num if Prime.prime?(num)
      primes_smaller_than(num - 1, res)
    end
    
    primes_smaller_than 100
    #=> [97, 89, 83, 79, 73, 71, 67, 61, 59, 53, 47, 43, 41, 37, 31, 29, 23, 19, 17, 13, 11, 7, 5, 3, 2]
    

    打印出来:

    primes_smaller_than(100).each { |e| puts "this is prime - #{e}" }
    

相关问题