카테고리 없음

[리눅스/쉘] bash로 피보나치 수열 구하기

미친토끼 2021. 3. 1. 23:50
#!/bin/sh

# 피보나치 수열 구하기
# 함수 fibonacci()는 인자 하나를 취해 그것의 수열값을 리턴한다.
# 메인에서는 이 함수를 여러번 호출한다.

function fibonacci() {
    # 지역변수에 첫번째 인자를 받는다.
    local number=$1
    one=1
    two=1
    three=0
    if [[ ( $number == 1) || ($number == 2) ]];
    then
        three=1;
    else 
        for (( i=3; i<=number; i++))
        do
            three=$(($one+$two))
            one=$two
            two=$three
        done
    fi
    echo "$three"
}

# 필자의 컴퓨터에서는 92번째까지만 제대로 나오고 93번째부터는 오버플로 발생.
MAX_NUM=92
for ((i=1; i<=$MAX_NUM; i++))
do
   result=$(fibonacci $i) 
   printf "$i 번째 피보나치 수열값: $result\n"
done

#result=$(fibonacci 60)
#echo "$result"

--------실행 결과-----------
(base) [Don@localhost BASH]$ sh fibo.sh 
1 번째 피보나치 수열값: 1
2 번째 피보나치 수열값: 1
3 번째 피보나치 수열값: 2
4 번째 피보나치 수열값: 3
5 번째 피보나치 수열값: 5
6 번째 피보나치 수열값: 8
7 번째 피보나치 수열값: 13
8 번째 피보나치 수열값: 21
9 번째 피보나치 수열값: 34
10 번째 피보나치 수열값: 55
........
86 번째 피보나치 수열값: 420196140727489673
87 번째 피보나치 수열값: 679891637638612258
88 번째 피보나치 수열값: 1100087778366101931
89 번째 피보나치 수열값: 1779979416004714189
90 번째 피보나치 수열값: 2880067194370816120
91 번째 피보나치 수열값: 4660046610375530309
92 번째 피보나치 수열값: 7540113804746346429