1)我想我理解了第一个,因为我注意到递归按顺序从n到n-1并退出当前的水平直到它到达0的基数并且存在。我将一些put语句放入映射并跟随递归。
def array_push(answer, n) #1. array push (RECURSIVE)
puts "B n: #{n} inception map"; return answer if n <= 0;
puts ". n: #{n} inception map"; answer << n;
puts "A n: #{n} inception map"; return array_push(answer, n-1)
end
puts array_push([], 4)
2)然而,当它向相反的方向发展时,这就是我迷失的地方......我很困惑为什么函数在它命中的时候没有返回false“如果n&lt;则返回false = 0“声明。根据我的理解,我的“B”和“。”首先评估puts语句,然后在“return false statement”之后评估我的“A”puts语句。
def reverse_push(answer, n) #2. reverse push (RECURSIVE)
puts "B n: #{n} inception map"; return false if n <= 0 ## <== right here ##
puts ". n: #{n} inception map"; reverse_push(answer, n-1)
p answer
puts "A n: #{n} inception map"; return answer << n
end
puts reverse_push([], 4)
答案 0 :(得分:1)
你所看到的是有道理的。想想调用堆栈:
caller -> r([],4) -> r([],3) -> r([],2) -> r([],1) -> r([],0)
caller -> r([],4) -> r([],3) -> r([],2) -> r([],1) <- false
caller -> r([],4) -> r([],3) -> r([],2) <- [1]
caller -> r([],4) -> r([],3) <- [1,2]
caller -> r([],4) <- [1,2,3]
caller <- [1,2,3,4]
在堆栈结束时返回False。在返回堆栈的路上,第二个函数的返回返回一个数组。