// fibonacci2.c
// 첫번째 fibonacci1.c를 모듈화 한 것.
// 피보나치 수열은 금방 커지기 때문에 int형보다, long int, long double을 선택한다.
// 형식 지정자는 자료형에 맞춰 %ld, %lf, %Lf를 사용한다. 그렇지 않으면 엉뚱한 숫자가 튀어나온다.
// 1, 1, 2, 3, 5, 8, 13...
// 피보나치 수열은 그 앞의 숫자와 그 앞의 앞의 숫자를 합해서 자신의 숫자를 정하므로,
// 앞의앞의 숫자를 one, 앞의 숫자를 two, 그것을 더한 자신을 three로 계산한다.
// 성능: fibonacci1.c 와 동일한 계산을 하므로 성능 양호.
#include <stdio.h>
#define MAX_NUM 200
long double fibonacci(int maxNum) {
long double one = 1, two = 1, three = 0;
if(maxNum==1 || maxNum==2) three = 1; // 1 또는 2면 1을 돌려줌
else {
for(int i = 3; i <= maxNum; i++) { //인덱스가 아니라 개수로 셈함. xx번째...
three = one + two; // 앞의 것과 앞의앞의 것을 더함
one = two; // 앞의 것을 앞의앞의 것으로 전환
two = three; // 현재 것을 앞의 것으로 전환.
}
}
return three;
}
int main(int argc, char *argv[])
{
for(int i = 1; i <= MAX_NUM; i++) {
printf("%d 번째 피보나치 수열 값: %.0Lf\n", i, fibonacci(i));
}
return 0;
}
-------------- 실행 결과 -------------
1 번째 피보나치 수열 값: 1
2 번째 피보나치 수열 값: 1
3 번째 피보나치 수열 값: 2
4 번째 피보나치 수열 값: 3
5 번째 피보나치 수열 값: 5
...................
197 번째 피보나치 수열 값: 66233869353085486269406456230584608882688
198 번째 피보나치 수열 값: 107168651819712326860353116949233367252992
199 번째 피보나치 수열 값: 173402521172797813134481939662687621349376
200 번째 피보나치 수열 값: 280571172992510139994835056611920988602368
카테고리 없음