재귀 함수를 사용하지 않고 다시 프로그램하라. 즉 main함수는 그대로 두고 함수 fibo만 변경하라.
체크 포인트 - 입력을 40으로 하고 실행시켜보라.
lab4_3과 hw4_1의 속도를 비교해보라. 어느것이 빠른가?
- LAB4_3과 HW4_2중 어느것이 프로그램하기 더 쉬운가?
#include int fibo(int n);
int main(void)
{
int n, idx;
printf("몇개의 피보나치 수열값을 출력할까요?(3보다 큰 정수):");
scanf("%d", &n);
for (idx = 0; idx < n; idx++) {
printf("%d ", fibo(idx));
if ((idx + 1) % 5 == 0)
printf("\n");
}
printf("\n");
}
int fibo(int n) // 재귀적으로 구현하지 않는다
{
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int fibo(int n);
int main(void)
{
int n, idx;
printf("몇개의 피보나치 수열값을 출력할까요?(3보다 큰 정수):");
scanf("%d", &n);
for (idx = 0; idx < n; idx++)
{
printf("%d ", fibo(idx));
if ((idx + 1) % 5 == 0)
printf("\n");
}
printf("\n");
}
int fibo(int n) // 재귀적으로 구현하지 않는다
{
int fib1 = 1, fib2 = 1, fib=1;
for (int i = 2; i <= n; i++)
{
fib = fib1 + fib2;
fib1 = fib2;
fib2 = fib;
}
return fib;
}
|
cs |
이거 상당히 어려웠다
그니까 저 main함수의 반복문은 배열처럼 생각하면 좀더 쉽다
예를 들어 피보나치 수열 3번째의 경우 2의 인덱스와 2의 값을 갖는데 그럼 fibo함수의 for문 안으로 들어와서 1+1을 계산하고 fibo를 반환한다
4번째의 경우 3의 인덱스와 3의 값을 갖는데 for안으로 돌아와서 fib1자리에 1이 fib2자리에 2가 들어오니 fib는 3이된다.