def rcall(num) return 0 if 10 == num 1 + rcall(num - 1)endp rcall(90) # => 80
此代码将始终返回10小于传递给num的值,即递归调用的计数.
我看不出它是如何工作的.我有一个模糊的理解,即如果满足退出条件则返回零,以便不再增加计数器.但是,确切地说,如何在proc调用中添加一个增加被调用的次数?我无法看到增量器的累积位置.
此外,这是一种特定于Ruby架构的技术,还是更普遍适用?我没有在问及如何计算递归调用的问题的任何答案中看到它;似乎大多数时候人们通过计数器变量来跟踪计数.
解决方法 我刚刚为你的代码添加了一些看法,也许有助于更好地遵循逻辑,而不是用我的英语解释.所以,这是经过调整的代码:
def rcall(num) if 10 == num rec = 0 puts "rec = #{rec} ---- End of recursion" return rec end rec = rcall(num - 1) res = 1 + rec puts "rec = #{rec} \t\t res = i + rec = #{res}" resend
例如,当你打电话给15时,你得到:
RCALL(15)
# rec = 0 ---- End of recursion# rec = 0 res = i + rec = 1# rec = 1 res = i + rec = 2# rec = 2 res = i + rec = 3# rec = 3 res = i + rec = 4# rec = 4 res = i + rec = 5# 5
如果调用小于10的数字,则永远不会到达递归的末尾,因此不会返回任何值来构建“调用堆栈”并引发错误:堆栈级别太深(SystemStackerror)
其他语言支持递归,例如Python.这里是着名的斐波纳契(How to write the Fibonacci Sequence?).
我还想在YouTube上分享这个关于递归的Computerphile视频:https://youtu.be/Mv9NEXX1VHc
总结以上是内存溢出为你收集整理的ruby – 为什么在递归proc调用中添加1会返回调用的计数?全部内容,希望文章能够帮你解决ruby – 为什么在递归proc调用中添加1会返回调用的计数?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)