1

これは私の試みです:

#!/bin/bash

function fibonacci(){

first=$1
second=$2

if (( first <= second ))
then
return 1

else 

return $(fibonacci $((first-1)) ) + $(fibonacci $((second-2)) )
fi
}

echo $(fibonacci 2 0)

私はelseステートメントに問題があると思います。return: +: numeric argument required 14行目でエラーが出ます。

私が抱えているもう1つの問題は、スクリプトが数字を表示しても数字が表示されないことですecho $(fibonacci 0 2)。その場合は1を返すので、1が表示されると思いました。これを達成する方法について、誰かが私にいくつかのヒントを教えてもらえますか?

あなたの答えのいくつかをチェックアウトした後、これは私の2回目の試みです.n番目のフィボナッチ数を1 + 1 + 1 + 1などの形式で表示することを除いて、正しく機能します。

#!/bin/bash

function fibonacci(){

first=$1
second=$2

if (( first <= second ))
then
echo 1


else 

echo $(fibonacci $((first-1)) ) + $(fibonacci $((first-2)) )
fi
}

val=$(fibonacci 3 0)
echo $val

私の最後の試み:

#!/bin/bash

function fibonacci(){

first=$1

if (( first <= 0 ))
then
echo 1


else 

echo $(( $(fibonacci $((first-1)) ) + $(fibonacci $((first-2)) ) ))
fi
}

val=$(fibonacci 5)
echo $val

ありがとうございます。

4

5 に答える 5

5
#!/bin/bash

function fib(){
    if [ $1 -le 0 ]; then
        echo 0
    elif [ $1 -eq 1 ]; then
        echo 1
    else
        echo $[`fib $[$1-2]` + `fib $[$1 - 1]` ]
    fi

}

fib $1
于 2014-04-04T07:19:37.463 に答える
2

$(...)置換演算子は、コマンドの出力に置き換えられます。関数は出力を生成しないため$(...)、空の文字列も生成されます。

関数の戻り値は$?、外部コマンドの終了コードと同じように入力されます。

したがって、何らかの出力を生成する (関数が結果を返すのではなく結果をエコーするようにする) か$?、各呼び出しの後に使用して値を取得する必要があります。私はエコーを選びます。

于 2013-06-16T18:50:50.537 に答える
0

短いバージョン、再帰的

fib(){(($1<2))&&echo $1||echo $(($(fib $(($1-1)))+$(fib $(($1-2)))));}
于 2017-11-20T06:28:57.010 に答える