일반적으로 recursion function의 경우에는 inline으로 컴파일되지 않는 것으로 알고 있습니다. 혹시나 해서 다음 코드로 테스트해 보았습니다.


[source code]

#include <stdio.h>

int factorial(int n)
{
  if (n <= 1) return n;
  return n * factorial(n - 1);
}

int main()
{
  int n = factorial(2);
  printf("%d\n", n);
}



[result]

2



[assembly]

; 11   :   int n = factorial(2);

; 12   :   printf("%d\n", n);


push 2

push OFFSET ??_C@_03PMGGPEJJ@?$CFd?6?$AA@

call DWORD PTR __imp__printf

add esp, 8


main 함수에서 factorial 함수를 호출하지 않고 컴파일 타임에 그 결과( factorial(2) == 2 )를 print의 인자로 집어 놓고 있는 것을 확인할 수 있습니다.



[결론]

factorial 함수의 인자가 큰 값이거나 인자가 가변일 때에는 factorial function을 직접 호출한다.


반면에 factorial 함수의 인자가 고정 값을 때에는 컴파일러가 알아서 최적화를 해 준다.




[download]

factorial_test.zip : Microsoft Visual Studio 2008 Release(/O2) 컴파일