局部函数变量的一个特性是自成体系。除了从脚本命令行处获得的变量,自成体系的函数不需要使用任何外部资源。
这个特性使得函数可以递归地调用,也就是说,函数可以调用自己来得到结果。通常递归函数都有一个最终可以迭代到的基准值。许多高级数学算法用递归对复杂的方程进行逐级规约,直到基准值定义的那级。
递归算法的经典例子是计算阶乘。一个数的阶乘是该数之前的所有数乘以该数的值。因此,要计算5的阶乘,可以执行如下方程:
5! = 1 * 2 * 3 * 4 * 5 = 120
使用递归,方程可以简化成以下形式:
x! = x * (x-1)!
也就是说,x的阶乘等于x乘以x-1的阶乘。这可以用简单的递归脚本表达为:

function factorial { if [ $1 -eq 1 ] then echo 1 else local temp=$[ $1 - 1 ] local result='factorial $temp' echo $[ $result * $1 ] fi
}

阶乘函数用它自己来计算阶乘的值:

$ cat test13
#!/bin/bash
function factorial { if [ $1 -eq 1 ] then echo 1 else local temp=$[ $1 - 1 ] local result=$(factorial $temp) echo $[ $result * $1 ] fi
} read -p "Enter value: " value
result=$(factorial $value)
echo "The factorial of $value is: $result"
$
$ ./test13
Enter value: 5
The factorial of 5 is: 120

shell 函数递归相关推荐

  1. shell 死循环if判断_运维小技巧(2):shell函数

    shell函数是什么 shell函数可以看作是一组shell命令的组合,用来完成一个特定的功能,它的功能和java中的方法类似. 2. shell函数长什么样 铛铛铛,先上代码. function l ...

  2. 【拔刀吧少年】之shell函数

    函数 一.shell函数定义 二.格式 三.函数返回值 四.函数传参 五.函数变量的作用范围 六.递归 1.阶乘 2.递归查目录 七.创建函数库 总结 一.shell函数定义 将命令序列按格式写在一起 ...

  3. shell函数与数组(了解函数,递归函数运用,了解数组,创建基数和偶数数组,冒泡排序,调试命令)

    文章目录 shell函数 了解函数 函数定义 递归函数 举例子 shell数组 定义数组 数组包括的数据类型与数组操作 数组操作 举例(快速创建数组.奇数数组) 冒泡排序法 调试命令 set命令 ba ...

  4. shell 函数详解

    目录 函数 一,什么是函数 二, 函数的返回值 三,函数语法 示例1: 示例2: 四,函数的调用 示例1: 示例2: 五,函数库文件 六, 递归函数 示例1: 示例2: 函数 一,什么是函数 1.把相 ...

  5. Shell 函数的定义和使用

    目录 一.Shell的函数的定义 1.1定义 1.2 函数返回值 1.3 函数传参 1.4 函数变量的作用范围 1.5 函数递归 1.5.1 阶乘 1.5.2 递归目录 1.6 创建库 一.Shell ...

  6. shell函数(用法及定义)

    shell函数 将命令序列按格式写在一起 可方便重复使用命令序列 文章目录 shell函数 一.shell函数定义: 方法一 方法二 二.函数返回值: 以乘法2乘以某数为例 三.函数传参: 加法 四. ...

  7. Shell函数知识点大全

    文章目录 一.Shell 函数 二.Shell 函数定义 三.函数返回值 四.函数传参 五.函数变量的作用范围 六.递归 1.阶乘 2.递归目录 七.函数库 一.Shell 函数 1.将命令序列按格式 ...

  8. shell脚本——shell函数详解

    shell脚本--shell函数详解 一.shell函数 1.shell函数的概念 2.shell函数的格式 (1)函数的定义 (2)调用函数的方法 3.函数返回值 4.函数传参 5.函数变量的作用范 ...

  9. shell 函数 与 函数库

    目录 前言 一.shell 函数 1.1 Shell函数定义 1.2 函数返回值 1.3 函数参数传值 1.4 函数变量生命周期 1.5 函数中可以调用函数 二.函数之递归 2.1 阶乘 2.2 遍历 ...

最新文章

  1. Agile Use Cases in Four Steps
  2. 如何检测过期的统计信息(转)
  3. spring中事务配置的3种方式
  4. HDU 3534 Tree (经典树形dp)
  5. 定制安装操作系统(二)
  6. uva 816(经典bfs例子)
  7. 为了一个HTTPS,浏览器操碎了心···
  8. python中有哪些重要的书写规则_一文读懂Python代码的书写规范
  9. 模拟知乎登陆(requests和scrapy)
  10. EifficientDet论文笔记
  11. InstallShield 2008 终止声明 (EOL)对最终客户意味着什么
  12. Bootstrap创建拼接式按钮下拉菜单
  13. 如何在pe里加载阵列卡驱动_PE中RAID卡驱动的添加办法
  14. zbbz 坐标标注lisp_cad坐标标注插件怎么用
  15. 定位技术的发展过程,从GPS开始
  16. 【计算机体系结构】记分牌调度算法 Python
  17. 深度学习——感知机:多层感知机(multi-layered perceptron)图文详解
  18. ubuntu使用minicom连接交换机/路由器Console口详细教程
  19. 数字电路5(基本CMOS逻辑门电路)
  20. SecureCRT工具介绍

热门文章

  1. 【原创】MATLAB/Simulink电动助力转向EPS模型
  2. EXCEL对象库无效或包含对不能找到的对象定义的引用的问题
  3. 多线程核心知识:原子性
  4. 跨数据库事务,微软的TransactionScope类是个好玩意
  5. 领域自适应(同构迁移学习)
  6. 2020年PDD数据分析笔试题 | 附解答
  7. mysql测试文件编辑器,有爱编辑器
  8. 设计模式——状态模式详解
  9. MATLAB实现智能计算方法实验:实验五 Hopfield神经网络
  10. 亲影:那些尘封的美好值得再回味