shell-递归函数(计算阶乘)

定义

shell函数的递归函数调用,就是把函数本身作为一个参数来调用。
函数既是调用者又是被调用者,每调用一层就进入新的一层。

例如:

#!/bin/bash
func ()
{
        read i      #标准输入读取数据i
        func "$i"      #调用自身
        echo "$i"      #输出$i
}
func      #调用函数

事实上上面的代码逻辑上是有问题的,函数func里面调用自身的话,在他调用的这个func里面又有一个func的调用,func的调用里面又有一个调用......和玄幻小说类似,世界之上有小世界,进入小世界后又有三千大世界......这样就陷入了一个死循环(是不是很像一个小品 (•‾̑⌣‾̑•)✧˖°)

为了使函数到达目的后就退出,就得想循环一样,给定一个终止条件。条件满足时,不再递归调用,逐层返回,直至最外层调用。
举个简单的例子(计算阶乘):

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
n!=1×2×3×...×(n-1)×n或者是0!=1,n!=(n-1)!×n

#!/bin/bash
echo "请输入"
read n
echo
func ()
{
        local i="$1"
        if [ "$i" -eq 0 ]; then
                result=1
        else
                let "m=i-1"
        func "$m"
                let "result=$i * $?"
        fi
                return $result
}
func "$n"
echo "$n的阶乘为:$?"

计算结果

验算一下:
3!=1*2*3=6
OK

posted @ 2020-06-04 03:02  徐野子  阅读(2058)  评论(0编辑  收藏  举报