2012-10-17 1 views
-1

가능한 중복 대 재귀 :
Recursion and Iteration비 재귀

재귀와 비 재귀 함수의 차이점은 무엇입니까? 정확히 피보나치.

시간과 기억에 관련된 답변을 찾고 있습니다.

+3

재귀 함수는 재귀 함수를 호출합니다. – raina77ow

+0

@ raina77ow, ok,하지만 이는 재귀 함수가 직접 또는 간접적으로 호출하기 때문입니다. – TheBlastOne

+2

당신이 물어 보는 것은 재귀와 반복의 차이입니다. 이미 여러 번 답변이 있습니다. http://stackoverflow.com/questions/72209/recursion-or-iteration 및 http://stackoverflow.com/ 질문/2576993/recursion-and-iteration 및 http://stackoverflow.com/questions/2185532/why-should-reursion-be-preferred-over-iteration – Arham

답변

0

재귀 함수는 프로그래밍 언어로 구현 된 프로 시저 또는 서브 루틴이며 구현이 자신을 참조합니다. Recursive and Non Recursive Fibonacci Series

+0

자, 이제 말해봐 : 이것들은 -'function a (x) {return x? b (x-1) : 0; } 함수 b (x) {return x? a (x-1) : 0; }'- 재귀 적? – raina77ow

+0

나는 동의하지 않는다. 주어진 프로그래밍 언어로 작성된 함수를 개발할 수 있습니다.이 함수는 다른 프로그래밍 언어로 작성된 함수를 호출하며 두 구현 모두 "기타"함수를 참조합니다. 결과 : 각 함수의 구현에서 볼 수없는 재귀 적 참조.간접 재귀입니다. – TheBlastOne

+0

@ raina77ow, 맞습니다. 다른 언어를 사용하지 않아도됩니다. 재귀 적. 간접적으로. – TheBlastOne

1

"재귀"단순히 수단 - :

비 재귀 기능 구현이되지 않는 자신을 참조 아래

재귀, 비 재귀 피보나치 시리즈에 대한 링크이며, 프로그래밍 언어로 구현 절차 나 서브 루틴 함수 자체를 호출합니다. 이것은 의도적 일 수도 있고 그렇지 않을 수도 있습니다 (의도하지 않은 재귀가 많은 충돌에 책임이 있습니다).

함수가 작업의 일부를 수행하고 나머지 부분을 수행하기 위해 호출하는 의도적 인 재귀는 유용한 프로그래밍 패러다임이지만 "이해하기"(어느 정도 이해/경험/기술이 필요함) .

기본적으로 반복은 "반복"(루프)을 대체하고 동반 된 배열 할당 (함수 본문의 로컬 변수)을 바꾸는 데 사용할 수 있습니다. 그러나 모든 반복적 인 또는 배열을 사용하는 함수가 그 재귀 적 등가성으로 효과적으로 변환 될 수있는 것은 아닙니다.

문제가 재귀에 적합한 경우, 비 재귀 버전의 실행 효율성과 거의 같은 재귀 버전을 작성할 수 있습니다. 호출 메커니즘의 효율성에 따라 약간 더 좋거나 나쁨 언어/컴파일러에서 루프 및 배열 인덱싱과 비교합니다. 저장소 측면에서 재귀는 거의 효율적이지 않지만 특정 문제에 대해 미리 할당 할 필요가없고 (할당 크기를 사전에 알 필요가없는) 이점이 있습니다.

대부분 재귀는 구현이 훨씬 간단하고 오류가 발생하기 쉽고 오류가 컴퓨팅에서 가장 큰 비용이기 때문에 대부분 (실제로는) 재귀가 더 좋습니다. (하지만 부적절한 일로 인해 큰 시간을 소비 할 수 있습니다.)

재귀가 좋은 경우 매우 좋습니다. 재귀가 나쁜 경우 매우 나쁩니다.

+0

그래서 시간은 영향을받지 않습니까? 메모리는 어때? – dalawh

+0

두 가지 모두 영향을받습니다. 효과가 예측할 수 없다는 것입니다. 각 호출마다 스택 프레임 오버 헤드가 있기 때문에 간단한 경우 메모리가 재귀를 위해 훨씬 더 높습니다. 그러나 복잡한 경우에는 큰 배열을 "필요한 경우에만"할당해야 할 필요가 없습니다. –