2017-10-08 59 views
0

我想递归增加CounterClass的@counter实例变量,但是每次调用#incrementer方法@counter再次设置为0,导致无限递归。尝试做递归计数器时的无限递归

我在做什么错? (我想这@counter变量从未更新)

class CounterClass 
    attr_accessor :counter 

    def initialize 
    @counter = 0 
    end 
end 

def incrementer(arg) 
    cc ||= CounterClass.new 

    cc.counter += 1 
    p cc.counter 
    incrementer(cc) unless cc.counter == 10 
end 
incrementer(CounterClass.new) 
+2

为什么你创建的'CounterClass'每当一个新的实例?这就是你做错了。 –

+3

此外,你没有使用'arg' –

+1

如果你这样做学习递归,你选择了一个可怕的可怕的练习。试着用列表来代替。就像找到一个单链表的长度一样。 –

回答

0

你可以做这样的事情:

class CounterClass 
    attr_accessor :counter 

    def initialize 
    @counter = 0 
    end 

    def incrementer 
    @counter += 1 
    incrementer unless @counter == 10 
    end 
end 

obj = CounterClass.new 
obj.incrementer 
p obj.counter #=> 10 
+1

请注意,在原始代码中,'incrementer'是一个“自由函数”。 –