首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >euler Project3 ruby>为什么这个解决方案有效?

euler Project3 ruby>为什么这个解决方案有效?
EN

Stack Overflow用户
提问于 2014-10-14 09:58:31
回答 2查看 67关注 0票数 0
代码语言:javascript
复制
def large_prime(n)
  return [] if n==1 
  factor = (2..n).find {|x| n % x == 0}
  [factor] + large_prime(n/factor)
end

我从其他地方得到了这个解决方案。我不理解代码的第四行,large_prime是递归调用的,并被附加到了因子上。

当我更改第一行"return []“并在返回后省略'[]‘时,我在第4行得到了一条错误消息,指出’+‘:没有将nil隐式转换为Array。那么,为什么这段代码可以工作呢?谢谢

附言:我显然是个菜鸟,所有的事情对我来说都是非常新鲜的。

EN

回答 2

Stack Overflow用户

发布于 2014-10-14 10:25:09

第三行找到2n之间的n的第一个除数。这一行本身不涉及递归。

我真的不理解您修改的代码,但它似乎在某些情况下返回nil,而原始方法总是返回一个数组。

票数 0
EN

Stack Overflow用户

发布于 2014-10-14 11:14:29

当传递1时,必须返回空数组才能终止递归。除1以外的任何正参数都将导致另一个对large_prime的调用,但参数1将导致large_prime仅返回一个空数组。

在每一级递归中,程序都会将一个具有找到的单个因子的数组添加到一个数组中,该数组由为值n/factor找到的所有因子组成。当找到最后一个因子(不是1)时,最后一次调用large_prime的参数为1,large_prime返回一个空数组,然后将该数组添加到包含最后一个因子的数组中,从而得到一个只包含最后一个因子的数组。然后返回这个数组,你得到了[next-to-last-factor] + [last-factor],返回了一个[next-to-last-factor, last-factor]数组,这个数组被添加到[next-to-next-to-last-factor]中,提供了[next-to-next-to-last-factor, next-to-last-factor, last-factor]。然后将其添加到数组[next-to-next-to-next-to-last-factor]中,给出...起泡,冲洗,重复,直到我们达到最大的因子,并加入它。

您必须返回一个空数组,因为您不能将nil添加到Ruby中的数组中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26351534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档