재귀에 의한 지수 계산
재귀에 의한 지수 계산
발행물
제발, 이 알고리즘에 존재하는 오류를 알고 싶습니다. 정보 :이 알고리즘은 재귀에 의한 지수 방법을 계산합니다.
#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가 없음).
노트
해결 방법 : 르 페르