나는이 재귀 함수가있는 경우 : 나는 신비 (20)을 찾는 함께 일하고C에서 재귀 기능 ++
int mystery(int n) {
if (n == 0 || n == 1 || n == 2) return n ;
return (mystery(n-1) + mystery(n-2) + mystery(n-3)) ;
}
합니다.
미스테리 (20)를 계산하기 위해 함수를 계산할 때 수행되는 추가 연산 수와 미스테리 호출 수를 알 수있는 방법은 무엇입니까?
내가 좋아하는 몇 가지 COUT 문을 추가하는 시도 :int mystery(int n) {
if (n == 0 || n == 1 || n == 2) {
cout << n << endl;
return n ;
}
cout << n << endl;
return (mystery(n-1) + mystery(n-2) + mystery(n-3)) ;
}
그러나 출력 이상 만 숫자가 때부터 정말 이해 할 수 없었다. 그리고 나는 그 cout 문장이 얼마나 많은 추가 연산이 수행되고 미스테리 (20)를 계산하기 위해 얼마나 많은 수의 미스테리 호출이 발생했는지를 말하는 방식으로 많은 것을 믿지 않습니까?
도움 주셔서 감사합니다.
글자를 인쇄 할 때마다 매 3 개의 추가 사항이 있습니다. 아니? – Falmarri
'mystery (n-1)'의 호출은'mystery (n-2)'호출에서 다시 계산 된 값을 이미 계산하고 재 계산 한 값을 재귀에 고유 한 오버 헤드를 제외하고 미스터리 (n-3) '라고 불렀다. 이것은 끔찍한 끔찍한 수행을 의미합니다. 동적 프로그래밍에 대해 읽어보십시오. – wilhelmtell
@wilhelmtell - 내 생각 엔이 작업은 추가 작업의 수를 계산하는 방법을 배울 할당의 일부입니다. 따라서 동적 프로그래밍을 사용하여 이들을 없애면 목적을 무너 뜨릴 수 있습니다. – Omnifarious