본문 바로가기
Language/C++

[C++_제 17장] 재귀 호출

by 전전긍긍 2021. 12. 9.

본 포스팅은 C++로 시작하는 객체지향 프로그래밍 책을 바탕으로 작성하였습니다.

 

C++로 시작하는 객체지향 프로그래밍

『C++로 시작하는 객체지향 프로그래밍』은 구문보다는 문제 해결에 중점을 두는 문제 구동 방식을 사용한 프로그래밍에 대해 가르치고 있다. 여러 가지 상황에서 문제를 야기한 개념을 사용함

book.naver.com


key point

 

 - 재귀함수는 자기 자신을 호출하는 함수이다.

 - 만일 재귀함수에서 기본 상태가 지정되지 않거나 최종적으로 기본 상태로 수렵하는 방식으로 재귀문제를 감소시킬 수 없는 경우에는 무한재귀가 발생할 수 있다. (함수가 무한적으로 실행되면 스택 오버플로를 발생시킨다.)

 

list 17.3 양수 n에 대해 2^n을 계산하기 위한 재귀적 수학 정의 작성

int abs(int n);

int main()
{
	cout << "n 입력하시오: ";
	int n;
	cin >> n;

	cout << abs(n) << endl;
	return 0;
}

int abs(int n)
{
	if (n == 0)
		return 1;
	else
		return 2 * abs(n - 1);
}

 

list 17.4 양수 n과 실수 x에 대해 x^n을 계산하기 위한 재귀적 수학 정의 작성

#include <iostream>
using namespace std;

int abs(int x, int n);

int main()
{
	int x;
	int n;
	cout << " x : ";
	cin >> x;
	cout << " n : ";
	cin >> n;

	cout << abs(x, n) << endl;
	return 0;
}

int abs(int x, int n)
{
	if (n == 0)
		return 1;
	else
		return x * abs(x, n - 1);
		
}

 

17.3 예제: 피보나치 수

 

#include <iostream>
using namespace std;

int fib(int);

int main()
{
	cout << "피보나치 급수의 인덱스를 입력하시오: ";
	int index;
	cin >> index;

	cout << "피보나치 급수는 " << fib(index) << endl;

	return 0;
}

int fib(int n)
{
	
	if (n == 0)
		return 0;
	else if (n == 1)
		return 1;
	else
		return fib(n - 1) + fib(n - 2);
}