Mutiny Temat założony przez niniejszego użytkownika |
Rekurencja ciąg dalszy » 2014-01-27 15:24:49 Co powiecie na coś takiego ? Mam napisać funkcję agm(double *x, double *y, int N) taką, że jeśli początkowe wartości zmiennych wskazywanych przez x i y są równe, odpowiednio,a_0 i b_0. to po zakończeniu funkcji znajdą się w nich liczby a_N i b_N zadane wzorem rekurencyjnym. a_(k+1)=(a_k+b_k)/2 oraz b_(k+1)=sqrt(a_k*b_k) a k=0,1,2,3,4,5,...,N-1 I tego to już serio nie potrafię ruszyć nawet
|
|
OSA_PL |
» 2014-01-27 16:53:54 Interpunkcja trochę utrudnia zrozumienie tej funkcji, ale jeżeli dobrze to zrozumiałem, to ja zrobiłbym to mniej więcej w ten sposób: void agm( double * x, double * y, int N ) { if( N > 0 ) { double a_k = * x; double b_k = * y; * x =( a_k + b_k ) / 2.0; * y = sqrt( a_k * b_k ); agm( x, y, N - 1 ); } }
|
|
Mutiny Temat założony przez niniejszego użytkownika |
» 2014-01-27 17:31:39 Niezależnie od wartości podawanych zawsze a_k i b_k mają tą samą wartość, chyba że mieszam coś ze wskaźnikami bo w sumie średnio je ogarniam... #include <stdio.h> #include <stdlib.h> #include <math.h> void agm( double * x, double * y, int N ) { if( N > 0 ) { double a_k = * x; double b_k = * y; * x =( a_k + b_k ) / 2.0; * y = sqrt( a_k * b_k ); agm( x, y, N - 1 ); } } int main() { double * x; double * y; double a = 110.0; double b = 10.0; x =& a; y =& b; int n = 8; agm( x, y, n ); printf( "%lf\n", a ); printf( "%lf\n", b ); return 0; }
|
|
OSA_PL |
» 2014-01-27 17:37:10 Spróbuj dać mniejsze n. |
|
Mutiny Temat założony przez niniejszego użytkownika |
» 2014-01-27 18:18:53 Fakt dla <=3 działa dla większych podaje to samo... |
|
OSA_PL |
» 2014-01-27 18:28:13 Precyzja zmiennych, tego nie przeskoczysz, no chyba że napiszesz własną implementację super dokładnych zmiennych. |
|
Mutiny Temat założony przez niniejszego użytkownika |
» 2014-01-27 18:39:26 Do tego mi daleko, dziękuje za pomoc :) |
|
« 1 » |