파스칼의 삼각형 값을 계산하는 재귀 함수를 만들었습니다.파스칼 삼각형 C++의 재귀 적 프로그램 최적화
최적화 할 방법이 있습니까?
파스칼의 삼각형에 대한 짧은 알림 : C (N, K) = C (N-1, K-1) + C (N-1, k)는 내 코드는 :
int Pascal(int n, int k) {
if (k == 0) return 1;
if (n == 0) return 0;
return Pascal(n - 1, k - 1) + Pascal(n - 1, k);
}
비 효율성 두 번 값을 두 번 저장한다는 것을 알 수 있습니다. (6,2) = C (5,1) + C (5,2) 예 : C (6,2) = C (5,1) + C (5,2) C 1) + C (4,2) 두 번 C (4,1)을 호출합니다
이 기능을 최적화하는 방법에 대한 아이디어가 있으십니까?
감사
나는이 대신 데이터 구조처럼 "테이블"에 당신이 그들을 저장해야이 값을 다시 계산 한 후 대신 다시 실행의 재귀하여 보는 고전 문제라고 생각합니다 함수를 사용하면 테이블에서 검색을 수행합니다. 정확히 무엇을 확인했는지, 동일한 값으로 함수를 호출하는 것과 중첩되는 것은 처리 시간 낭비입니다 (고전적 프로 시저 시간/메모리 트레이드 오프). 나는 이것에 대한 솔직한 해결책이 없지만 당신은 분명히 올바른 생각을 가지고 있습니다. – shaunhusain
하나의 작은 최적화는 n == k 일 때 1을 반환하는 것으로 O (C (n, i)는 0에서 k까지))'. – Neil
@shaunhusain 감사합니다. 분명히, 나는 약간의 기억을 할당 할 것입니다! @ 네일 좋은 생각. – JohnG