没有全局变量的Ruby递归计数器



我正在尝试计算该方法在程序生命周期中递归的次数。下面的代码获得了所需的结果,但使用了全局变量。有没有办法或更好的办法?

$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)

最新更新