ruby – 为什么在递归proc调用中添加1会返回调用的计数?

ruby – 为什么在递归proc调用中添加1会返回调用的计数?,第1张

概述假设我有这个代码: def rcall(num) return 0 if 10 == num 1 + rcall(num - 1)endp rcall(90) # => 80 此代码将始终返回10小于传递给num的值,即递归调用计数. 我看不出它是如何工作的.我有一个模糊的理解,即如果满足退出条件则返回零,以便不再增加计数器.但是,确切地说,如何在proc调用中添加一个增加被调用的 假设我有这个代码:

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会返回调用的计数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1212467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存