我正在尝试计算该方法在程序生命周期中递归的次数。下面的代码获得了所需的结果,但使用了全局变量。有没有办法或更好的办法?
$count = 0
def AdditivePersistence(num)
return 0 if num.to_s.length == 1
numarr = num.to_s.chars.map!(&:to_i)
i = numarr.inject(&:+)
$count+=1
if i.to_s.length!=1
AdditivePersistence(i)
end
$count
end
由于您想要程序生命周期内递归调用的总数,因此某种形式的全局变量是唯一可以做到这一点的方法。您可以使用显式全局变量,也可以使用伪装的全局变量,如单例类或线程局部变量。我不会在这里说明这些,因为在这个用例中,它们不如普通的全局变量。
您可以接受一个数组,其中数组中的第一个变量是num
,然后第二个是count
。那么您只需要执行return [num, count]
另一个选项是更新方法定义以接受计数器作为参数。
使用这种方法,您的方法可以只递增它接收到的任何计数器值,然后在递归调用中传递递增的值。
def AdditivePersistence(num, counter)
return 0 if num.to_s.length == 1
numarr = num.to_s.chars.map!(&:to_i)
i = numarr.inject(&:+)
counter +=1
if i.to_s.length!=1
AdditivePersistence(i, counter)
end
counter
end
# usage
AdditivePersistence(12, 0)