(main procedure 안)
...
call func0
exit
...
(func0 정의 - var0 는 dword 변수)
func0 proc
mov ebx, [esp]
mov var0, ebx
call func1
ret
func0 endp
(func1 정의)
func1 proc
...
call func1
...
push var0
ret
func1 endp
일단 재귀 끝나면 바로 원래 함수주소로 돌아가는데?
(main procedure 안)
...
call func0
exit
...
(func0 정의 - var0 는 dword 변수)
func0 proc
mov ebx, [esp]
mov var0, ebx
call func1
ret
func0 endp
(func1 정의)
func1 proc
...
call func1
...
push var0
ret
func1 endp
일단 재귀 끝나면 바로 원래 함수주소로 돌아가는데?
테일 리커젼이란 것은 재귀가 다른 연산이 추가로 필요치 않고 끝자락에서만 일어나는 걸 뜻하는 추상적인 개념이다. 니가 고급언어를 구현한다면 테일 리커젼의 경우 단순 반복으로 최적화 컴파일이 되기 때문에 테일 리커젼이 특별한거야
해서 니가 끄적인건 죽도밥도 아님
야이메친 말이 맞고 컴파일러가 저딴식으로 결과물을 내밷었으면 개적화
정의는 재귀 그 자체의 값만 요하는 재귀에서 콜스택을 따라 올라가지않고 바로 원래의 진입점으로 돌아가는게 꼬리재귀아냐?
내가 아는 정의 자체가 틀린거? 블로그 보고 한건데.. 어셈코드는 내가짰어
ㄴ얌마, 니가 그냥 휴먼 좁빱 컴파일 했다 보면 됨. 잡지랄 하지말고 고급언어로 테일리커젼 만든후 단순반복으로 바뀌는 걸 적어봐. 니가 병신 아니면 패턴이 일정하다는 걸 알게 될텐데, 패턴변화를 컴퓨터로 해주면 그게 "테일리커젼 옵티마이즈를 지원하는 컴파일러" 이렇게 되는 거다.
그냥 꼬리 재귀의 정의는 재귀 호출을 return 문에 박아 놓은 걸 말한다. 이런 형태의 재귀는 기계적으로 반복문으로 고칠 수 있으니까 tail recursion optimization이 되는 거고.