수학적 귀납법에 의해서 이해를 해야한다. 절차 지향적 사고와 귀납적 사고가 존재한다.
void func(int n){
if(n==0) return;
cout << n << ' ';
func(n-1);
}
절차 지향적 사고
순서대로 흐름대로 확인하는 사고

귀납적 사고
func(1)이 1을 출력한다.
func(k)가 k, k-1, k-2, …, 1을 출력한다.
func(k+1)가 k+1, k, k-1, …, 1을 출력한다.
base condition으로 수렴해야 한다.memoization을 하는 것이 좋다. (보통의 경우 같은 함수를 호출하는 경우가 많기 때문이다. 그렇게 되면 스택 영역에 계속 누적이 된다.)