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。那么,为什么这段代码可以工作呢?谢谢
附言:我显然是个菜鸟,所有的事情对我来说都是非常新鲜的。
发布于 2014-10-14 10:25:09
第三行找到2和n之间的n的第一个除数。这一行本身不涉及递归。
我真的不理解您修改的代码,但它似乎在某些情况下返回nil,而原始方法总是返回一个数组。
发布于 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中的数组中。
https://stackoverflow.com/questions/26351534
复制相似问题