iterative, recursive fibonacci series

SangJun·2022년 10월 20일
0

자료구조

목록 보기
1/18

문제 : 0~40의 범위를 가지는 입력을 받는다. 피보나치 수열의 n번째 값인 F(n)을 구하여라.
반복문과 재귀를 이용해 각각 구현하고 두 함수의 실행시간을 출력해 비교하라.

#include <iostream>
#include <time.h>
using namespace std;

class Fibonacci {
private:
	int* L;
public:
	Fibonacci(int n) {
		L = (int*)malloc(sizeof(int) * (n + 1));
	}//생성자

	int iterFibo(int n) {
		while (n > 0) {
			if (n > 40 || n < 0) {
				return 0;
			}     
			for (int i = 0; i < n + 1; i++) {
				if (i <= 1) { L[i] = 1; } //1 1 2 3 5 F(3) = 2
				else { L[i] = L[i - 1] + L[i - 2]; }
			}
			return 0;
		}
		return 0;
	}
	int recurFibo(int n) {
		if (n < 0 || n > 40) {
			std::printf("wrong range\n");
			return 0;
		}
		else if (n <= 1) { n = 1; }
		else {
			n = recurFibo(n - 1) + recurFibo(n - 2);
		}
		return 0;
	}
	int* getL() const {
		return L;
	}
};

int main() {
	int n = 0; clock_t start, finish; double elapsed;
	scanf_s("%d", &n);
	while ( n >= 0 && n <= 40 ) { //while True
		Fibonacci f(n);

		start = clock();

		f.iterFibo(n);

		finish = clock();

		elapsed = ((double)(finish)-(double)(start)) / CLOCKS_PER_SEC;
		std::printf("Iterative: %d ", f.getL()[n - 1]);
		std::printf("(%f", elapsed * 1000.0);
		std::printf("%s", "ms)\n");

		start = clock();

		f.recurFibo(n);

		finish = clock();

		elapsed = ((double)(finish)-(double)(start)) / CLOCKS_PER_SEC;
		std::printf("Recursive: %d ", f.getL()[n - 1]);
		std::printf("(%f", elapsed * 1000.0);
		std::printf("%s", "ms)\n");
		scanf_s("%d", &n);
	}
}

재귀함수에 clock을 넣을 수 없어 main 함수에서 시간을 측정하였다.

profile
Let there be bit.

0개의 댓글