Ruby:递归方法

dav*_*000 -1 ruby recursion

def reverse_append(arr, n)  
    return arr if n < 0 
    reverse_append(arr, n-1)
    arr << n
    arr
end 

reverse_append([],4) #=> [0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我似乎无法理解这种递归方法.它产生一个从0到n的数组.

谁可以给我解释一下这个?

Tom*_*ord 8

  1. 该方法reverse_append([],4)被调用
  2. 因为4 >= 0,return语句不会被调用.
  3. 该方法reverse_append([],3)被调用.
  4. 因为3 >= 0,return语句不会被调用.
  5. 该方法reverse_append([],2)被调用.
  6. 因为2 >= 0,return语句不会被调用.
  7. 该方法reverse_append([],1)被调用.
  8. 因为1 >= 0,return语句不会被调用.
  9. 该方法reverse_append([],0)被调用.
  10. 因为0 >= 0,return语句不会被调用.
  11. 该方法reverse_append([],-1)被调用.
  12. 因为-1 < 0,[]返回了array().
  13. 我们在调用堆栈中弹出一个级别,到哪里n = 0arr = [].
  14. arr << narr返回,所以现在arr = [0].
  15. 我们在调用堆栈中弹出一个级别,到哪里n = 1arr = [0].
  16. arr << narr返回,所以现在arr = [0, 1].
  17. 我们在调用堆栈中弹出一个级别,到哪里n = 2arr = [0, 1].
  18. arr << narr返回,所以现在arr = [0, 1, 2].
  19. 我们在调用堆栈中弹出一个级别,到哪里n = 3arr = [0, 1, 2].
  20. arr << narr返回,所以现在arr = [0, 1, 2, 3].
  21. 我们在调用堆栈中弹出一个级别,到哪里n = 4arr = [0, 1, 2, 3].
  22. arr << narr返回,所以现在arr = [0, 1, 2, 3, 4].
  23. 最后,"顶级"方法返回,我们得到了最终结果.