首页 文章

Ruby - 是否有一个递归解决方案来查找数字的除数?

提问于
浏览
0

我正在做一个ruby问题,想要一个方法来查找除了自身之外的数字的所有除数,输出是一个有序数组 . 如果数字是素数,则列出它是素数 .

我目前正在努力教自己递归 . 简单的递归问题,如找到数字的阶乘是非常基本的理解,但我想知道这个特定问题是否可以递归完成 . 它似乎符合可能的标准,但我无法弄明白 .

例子n = 15,除了它们之外的除数是[3,5] .

我的代码解决了这个问题 .

require 'prime'

def divisors(n)
  return "#{n} is prime" if Prime.prime?(n) 
  x = n/2
  arr = []
  until x == 1
    arr << x if n % x == 0
    x -= 1
  end 
  arr.sort
end

任何以递归方式执行此操作的帮助都很棒,或者只是让我知道这不是一个可以通过这种方式完成的问题也会有所帮助 .

1 回答

  • 1
    def divisors(n, x=nil)
      return "#{n} is prime" if Prime.prime?(n) 
      x ||= n/2
      arr = []
      return arr if x == 1
      if n % x == 0
        arr << x
      end
      (arr.concat divisors(n, x - 1)).sort
    end
    

    该函数被重构以处理三件事:

    • 初次通话( x ||= /2

    • 基本案例(提前退货)
      通过递归完成

    • 迭代逻辑 .

    重要的是,在迭代期间发生变化的变量( x )被放置为方法的参数(具有默认值,因此它基本上可以用作私有参数)

    顺便说一句,我个人发现学习Elixir非常有助于理解递归 . 通过模式匹配和多个功能子句,初始调用,基本情况和迭代可以拆分为自己的方法 .

相关问题