숫자 n이 주어졌을 때, n의 피보나치(Fibonacci) 수열을 출력하는 프로그램을 작성하시오.
피보나치(Fibonacci) 수는 수학에서 다음과 같이 정의된다.
8의 피보나치 수열은 다음과 같다.
0, 1, 1, 2, 3, 5, 8, 13, 21
n의 피보나치(Fibonacci) 수를 구하는 알고리즘은 반드시 다음
형식의 함수(메서드)로 작성할 것.
unsigned long fibo(int n)
피보나치(Fibonacci) 수를 구하는 알고리즘의 시간 복잡도는 O(n)으로 구현해야 함
n 값은 프로그램 실행 시 콘솔 키보드로부터 정수의 형태로 입력 받음
피보나치 수열을 구하기 위하여 입력 받는 n 값의 범위는 0 ~ 100으로 함
#include<stdio.h>
#include <malloc.h>
unsigned long fibo(int n);
void main()
{
int num = 0;
printf("수를 입력하세요 : ");
scanf_s("%d", &num);
fibo(num);
}
unsigned long fibo(int n)
{
int* arr = (int*)malloc(sizeof(int) * n);
for (int i = 0; i < n; i++)
{
if (i < 2)
{
arr[i] = 1;
}
else
{
arr[i] = arr[i - 2] + arr[i - 1];
}
printf("%lu ", arr[i]);
}
free(arr);
return 0;
}
피보나치 수열이 앞의 두 숫자를 더한 값이 반복된다는 것을 생각하고 작성했다.
첫 번째와 두 번째 인덱스에는 앞의 숫자가 두개가 되지 않으므로 따로 조건을 주고, 값이 항상 1이기 때문에 1을 대입해주었다.
사용자가 입력하는 데이터를 받아서 출력해야하기 때문에 동적 메모리 할당함수인 malloc을 사용했다.
동적 메모리를 할당해주었으므로 free함수를 이용해 메모리를 반환한다.
%d로 출력했을 때 어느 크기 이상만큼의 수를 출력하지 못해 %lu로 출력값을 바꿨더니 잘 작동한다.
unsigned long은 %lu로 출력한다
뭔가 좀 부족하고 잘못된 느낌이 드는데... 지금의 나로선 잘 모르겠다...
코드 창에서 녹색 줄이 뜨는데 작동은 잘 되는 걸 보면 잘 된건가?