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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM