定義
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