그게 좋은거임?
while(1) println("test")
fun test(){
println("test")
test()
}
이러면 test()는 실행되다가 터지고 while은 안터지고 계속실행되는데
터지는게 좋은거아님? 안터지면 컴터 렉걸려서 정지누르기 힘든데
둘다 제대로된 타이밍에 return만 되면 오버플로 발생할일 없지않나??
그냥 메모리 공간을 적게 먹어서 좋다고하는건가
아니면 재귀 도중에 원하는 결과가 나오기도 전에 스택오버플로 발생하는 경우가 있음?
첫번째는 오버플로 날일이 없음 2번째는 tailrec으로 최적화 걸리면 첫번째 코드랑 동등해짐
그니까 오버플로가 안나는게 좋은건지 궁금한거
오버플로 생기면 메모리가 고생한거고 안생기면 cpu가 고생하는거아님?
그런건 개발할때 잡으셈
에러가 안나면 계속해서 고생해야되자나 정지하기전까지 근데 오버플로생기면 자동으로 멈춰주는데
걍 개발 끝나고 tailrec 처리 해주면 메모리가 덜고생해서 좋다는건가
둘다 븅신같은 상황인데 터지는게 디버깅 편하면 님은 그렇게 쓰셈
딱 천만번만 돌려보셈 스택 안 터지고 끝낼 수 있나
tailrec 안쓰면 12000번정도 까지밖에 안되는구나
ㄳ ㄱ ㅅ
대충 ㄱㅅ치지 말고 제대로 이해를 하고 가라 좀; 10만번 돌려야 하는 코드가 있는데 코드 돌리면 끽 해봐야 0..1초 안쪽으로 돌아간다. 근데 그걸 일반 재귀로 돌리면 어떻게 되겠냐 호출->호출->호출 이런식으로 호출에 대한 정보가 메모리에 누적되겠지. 그게 지정한 사이즈를 넘어서면 스택오버플로우 나는거보 재귀가 아닌거로 돌리거나 중간중간 eval하면 0.1초 안쪽으로 오플로 없이 결과가 잘 나오는거다.