我正在尝试计算方法在程序生命周期内递归的次数。下面的代码获得了所需的结果,但使用了全局变量。有没有办法绕过这个或更好的方式?
$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
答案 0 :(得分:1)
由于您希望在程序的生命周期内递归调用的总数,因此以某种形式的全局变量是您可以执行此操作的唯一方法。您可以像使用的那样使用显式全局变量,也可以使用伪装全局变量,例如单例类或线程局部变量。我不会在这里说明这些,因为它们不如这个用例的普通全局变量。
答案 1 :(得分:0)
您可以接受一个数组,其中数组中的第一个变量为num
,然后第二个变量为count
。然后你就会做return [num, count]
答案 2 :(得分:0)
另一种选择是更新您的方法定义以接受计数器作为参数。
使用这种方法,您的方法可以递增它接收的任何计数器值,然后在递归调用中传递递增的值。
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)