본문 바로가기

알고리즘

재귀호출

팩토리얼

n! = 1 * 2 * .  .  .  n 

 

 

#include <stdio.h>
#define NUMBER 5

// 재귀함수 사용
unsigned int factorial(unsigned int num) {
	if (num == 1) {
		return 1;
	}
	return num * factorial(num - 1); // 재귀호출 
}

// 반복문 사용
unsigned int factorial2(const unsigned int num) {
	int i, result = 1;
	for (i = 2; i <= num; i++) {
		result *= i;	// 초기값이 1이니 2부터 n까지 곱해나간다.
	}
	return result; 
}

int main() {
	printf("%d!은 %d입니다.\n", NUMBER, factorial(NUMBER));
	printf("%d!은 %d입니다.", NUMBER, factorial2(NUMBER));
	return 0;
}

 

 

 

피보나치 수열

ex) 1 1 2 3 5 8 13 21 ...

 

 

새로운 번호 = 전전번호 + 전번호

 

#include <stdio.h>
#define NUMBER 8

// 재귀함수 사용
unsigned int fibonacci(unsigned int num) {
	if (num == 1 || num == 2) return 1;
	return fibonacci(num - 1) + fibonacci(num - 2);
}

// 반복문 사용
unsigned int fibonacci2(const unsigned int num) {
	int prePreNum = 1, preNum = 1, i, curNum = 0;
	if (num == 1 || num == 2) return 1;	// 피보나치 수열이 1번째이거나 2번째 값이면 1을 반환
	for (i = 3; i <= num; i++) {	// 3번째 값부터 실행된다.
		curNum = prePreNum + preNum;	// i번째 번호 = 전전번호 + 전번호
		prePreNum = preNum;	// curNum이 갱신됬니 한칸씩 당긴다.
		preNum = curNum;
	}
	return curNum;
}


int main() {

	printf("%d번째 숫자는 %d입니다.\n", NUMBER, fibonacci(NUMBER));
	printf("%d번째 숫자는 %d입니다.", NUMBER, fibonacci2(NUMBER));
	return 0;
}

 

 

'알고리즘' 카테고리의 다른 글

stack  (0) 2023.04.28
quick sort  (0) 2023.04.20
삽입 정렬 알고리즘  (0) 2023.04.12
선택 정렬 알고리즘  (0) 2023.04.11
버블정렬  (0) 2023.04.07