ユーザーの入力を次のように考えてみましょう9
。したがって、9までのフィボナッチ数列は次のようになります。 0,1,1,2,3,5,8,13,21
予想出力: 0,*,1,*,3,*,8,*,21
以下は、ロジックの実装に使用したコードです。
UserInput=9
a=0
b=1
echo "The Fibonacci series is : "
for (( i=0; i<UserInput; i++ ))
do
if [ $i -eq 2 ]
then
echo -n "$a "
sn=$((a + b))
a=$b
b=$sn
fi
done
ベストアンサー1
力ベースのawk
ソリューション(単純化のために仮定n>2
):
awk -v n=9 'BEGIN{q=1; printf "0,*,"; for (i=2;i<n;i++) {s=q+r;r=q;q=s; printf "%s%s",i%2?"*":s,i==n-1?"\n":","}}'
ユーザー入力は変数に保存され、n
コマンドラインパラメータを介して渡されます。awk
-v n=number
次の場合にすぐに終了するにはn<3
:
awk -v n=9 'BEGIN{if (n<3) exit; q=1; printf "0,*,"; for (i=2;i<n;i++) {s=q+r;r=q;q=s; printf "%s%s",i%2?"*":s,i==n-1?"\n":","}}'
説明する
awk
はテキスト処理ツールであり、私たちはこれを「創造的に乱用」しています。したがって、すべてはBEGIN
通常、最初の入力ファイルが処理される前に実行されるコードを含むブロック内で発生します。
構文自体はCと非常に似ているので
- 系列の最初の2つの項を印刷します(家庭のために固定されています
n>2
)。printf "0,*,"
- ループ内の
2
最初の2つの合計の合計でn-1
フィボナッチ数を計算し、合計を更新します。s
q
r
q
r
*
偶数の場合は印刷し、偶数でない場合はi
現在のフィボナッチ数列を印刷します()。s
i%2?"*":s
,
次に、ループの終わりに達したかどうかに応じてaまたは改行文字を印刷します(i==n-1
)。