如果你真的想用__method__
,你的方法是正确的,合理的可读性。要符合常规的Ruby指南,你可以只取出return
S和使用2个空格作为缩进(如@ sagarpandya82在评论中提到):
def recurse(value)
if value < 5
self.send(__method__, value + 1)
else
value
end
end
我看不出有任何理由要在这里使用self.send(__method__)
,所以你可以写:
def recurse(value)
if value < 5
recurse(value + 1)
else
value
end
end
其实,我会说你根本不需要递归。你所有的方法,它只是不断增加1的值,直到达到5.如果该值大于5,则返回值:
对于整数:
def no_recurse(value)
[value, 5].max
end
no_recurse(4)
# 5
no_recurse(-3)
# 5
no_recurse(7)
# 7
no_recurse(-2**1000)
# 5
no_recurse(4.5)
# 5 # <- That's wrong
对于花车,你会只需要将小数部分加到5
即可。
def no_recurse(value)
[value, 5 + value % 1].max
end
no_recurse(4.5)
# 5.5
no_recurse(5.5)
# 5.5
no_recurse(6)
# 6
no_recurse(-7)
# 5
的[获取当前执行方法的名称]可能的复制(http://stackoverflow.com/questions/199527/get-the-name-of-the-currently:这将任意数量的工作-executing-method) –
我认为你的解决方案读得很好。作为一个附注,你可以省略'return's,并且你应该使用2个空格来缩进。 –
很多时候递归方法并不像迭代那样简洁或有效。 Ruby的Enumerable库提供了比大多数更多的功能,并且可以在列表上创建奇迹。在许多情况下,递归事物可以表示为一系列列表转换。 – tadman