재귀에 의한 지수 계산

재귀에 의한 지수 계산

발행물

제발, 이 알고리즘에 존재하는 오류를 알고 싶습니다. 정보 :이 알고리즘은 재귀에 의한 지수 방법을 계산합니다.

 #include #include int factoriel (int n, int i, int fact) {if (i = n + 1) {사실 = 1; 사실을 회신한다. } else {사실 = 사실 * i; 나는 ++; factoriel (n, i, 사실); }} float puissance (int n, int i, float x, float p) {if (i = n + 1) {p = 1; p를 반환; } else {p = p * x; 나는 ++; puissance (n, i, x, p); }} int main () {const float EPS = 0.0001; int i, n, fact; float x, p, s, T; printf ( "Donner x :"); scanf ( "% f", & x); n = 0; T = 1; s = 0; 사실 = 1; p = 1; while (floor (T)> EPS) {T = puissance (n, 1, x, p) / factoriel (n, 1, 사실); s = s + T; n = n + 1; } printf ( "Exp (% f) = % f \ n", x, s); } 

해결책

몇 가지 오류.

나는 계승과 힘을 계산하기 위해 재귀를 사용하는 부조리를 넘어, 당신이 요청한 것 같습니다.

첫째, 자세한 구문은 매우 고전적입니다 : 테스트는 ==, =가 아닙니다. 당신의 두 함수에서 if (i == n +1)

더 나쁜 것은, 두 함수 모두를 테스트 할 때 반환이 없다는 것입니다. 그래서 당신의 함수는 아무 것도 반환하지 않습니다, 그것은 임의의 값을 가질 수 있습니다. 나는 첫 번째 반환 계승 (n, i, 사실)을 갖는 것이 아이디어라고 생각한다.

그러나이 수정 요인으로도 Thy 힘은 작동하지 않을 것입니다. 당신은 좋은 계산을 한 다음 무대 n +1로 돌아 왔습니다. 결과를 1로 강요 할 수 있습니다!

마지막으로 손에서 p와 fact를 각 루프에 다시 초기화했습니다.

필자의 의견으로는 1에서 n +1로 증가하는 것보다는 (n에서 1로) 값을 줄임으로써 계승 함수와 힘을 쓸 것을 권합니다. 함수는 하나의 매개 변수 만 필요로합니다. 더 간단합니다 (i, Fact 또는 p가 없음).

노트

해결 방법 : 르 페르

이전 기사 다음 기사

톱 팁