ruby – 为什么在递归proc调用中添加1会返回调用的计数?
发布时间:2020-12-17 01:24:12 所属栏目:百科 来源:网络整理
导读:假设我有这个代码: def rcall(num) return 0 if 10 == num 1 + rcall(num - 1)endp rcall(90) # = 80 此代码将始终返回10小于传递给num的值,即递归调用的计数. 我看不出它是如何工作的.我有一个模糊的理解,即如果满足退出条件则返回零,以便不再增加计数器.
假设我有这个代码:
def rcall(num) return 0 if 10 == num 1 + rcall(num - 1) end p 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} tt res = i + rec = #{res}" res end 例如,当你打电话给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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |