때로는 인터뷰에서 재귀를 사용하여 문제를 해결하기 위해 (예 : 1
무한 정밀도 정수 추가 ) 또는 문제 자체가 재귀를 사용하기에 적합한 것으로 나타날 때. 때로는 문제 해결을 위해 재귀를 많이 사용하기 때문일 수 있으므로 많은 생각없이 재귀를 사용하여 문제를 해결합니다.
그러나 재귀를 사용하여 문제를 해결하는 것이 적합한 지 결정하기 전에 고려해야 할 사항은 무엇입니까?
내가 가진 생각 :
매번 절반으로 줄어든 데이터에 대해 재귀를 사용하는 경우 16GB RAM 또는 8TB 하드 드라이브에 들어갈 수있는 모든 데이터는 42 레벨 깊이의 재귀로 처리 할 수 있으므로 재귀를 사용하는 데 아무런 문제가없는 것 같습니다. (따라서 스택 오버플로가 없습니다 (일부 환경에서는 스택이 42 레벨 이상인 4000 레벨 깊을 수 있지만 동시에 각 호출 스택이 더 많은 메모리를 차지하는 로컬 변수 수에 따라 달라집니다) 로컬 변수가 많고 스택 오버플로를 결정하는 메모리 크기 (레벨이 아닌))).
순수한 재귀를 사용하여 피보나치 수를 계산하는 경우 중간 결과를 캐시하지 않으면 시간 복잡성에 대해 걱정해야합니다.
그리고 1
무한 정밀도 정수를 추가 하는 것은 어떻습니까? 아마도 3000 자리 길이 또는 4000 자리 길이의 숫자로 작업하여 스택 오버플로를 일으킬 수 있습니까? 나는 그것을 생각하지 않았지만 대답은 아니요, 재귀를 사용해서는 안되지만 평범한 루프를 사용해야합니다. 어떤 응용 프로그램에서는 숫자가 실제로 4000 자릿수 여야하기 때문에 일부는 확인해야합니다. 숫자가 소수인지 여부와 같은 숫자의 속성.
궁극적 인 질문은 재귀를 사용하여 문제를 해결하기 전에 고려해야 할 사항은 무엇입니까?
1
무한 정밀도 정수를 추가하는 것은 어떻습니까? 당신은 말할 수 있습니다, 예, 그들은 더 작은 문제로 감소하지만 순수한 재귀는 적합하지 않습니다