递归中Return实例分析

农民  金牌会员 | 2024-10-8 17:27:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 873|帖子 873|积分 2619

函数递归


  • 局部函数变量的特性自成体系,作为调用函数自身
  • 递归函数不依靠任何外部资源,自成体系的迭代到基准值
return:返回特定的退出状态码,在函数结束时
  1. #! /bin/bash
  2. # using recursion
  3. # 计算阶乘,formula:x!=x*(x-1)!, 使用递归函数得到(x-1)!
  4. function factorial {
  5.     # 递归边界,根据1的阶乘是1
  6.         if [ $1 -eq 1 ]; then
  7.                 echo 1
  8.         else
  9.                 local temp=$[ $1 -1 ]
  10.         # 接收函数的输出,并将返回值传递给result
  11.                 local result=$(factorial $temp)
  12.                 echo $[ $result * $1 ]
  13.         fi
  14. }
  15. read -p "Enter value: " value
  16. # result与自成体系的递归函数不同
  17. result=$(factorial $value)
  18. echo "The factorial of $value is : $result"
复制代码
明白优化


  • 当到达递归边界后,函数return最底层被调用并开始回溯

    • 递归函数的return(回溯)次序和调用次序刚好相反!

那是因为上一层执行递归之后的代码会调用下一层返回的值
亦或者说:最底层的实现(return1)作为最外层的调用(return4),如此循环往复
例如,计算 factorial 4 的过程如下:

  • factorial 4 调用 factorial 3,返回 3 * factorial 3。
  • factorial 3 调用 factorial 2,返回 2 * factorial 2。
  • factorial 2 调用 factorial 1,返回 1 * factorial 1。
  • factorial 1 返回 1。
    逐层返回时:
  • factorial 2 返回 2 * 1 = 2。
  • factorial 3 返回 3 * 2 = 6。
  • factorial 4 返回 4 * 6 = 24。
  • 当递归停止后,函数内部的result返回的是之后的阶乘,因为每一层递归都会将当前的 result 乘以当前的 $1,直到最外层调用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农民

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表