Lakjon Temat założony przez niniejszego użytkownika |
Obliczanie rekurencyjne ciągu liczb » 2016-01-10 13:21:10 Czy mógłby ktoś pomóc, muszę wyświetlić liczby od zadanej granicy dolnej do zadanej granicy gornej z ciagu Xn=Xn-1+(-1)^n*1/n; gdzie X0=1?
#include <stdio.h> #include <stdlib.h> #include <math.h>
int ciag(int, int, int, int, int);
int main(void) { int dolna_granica, gorna_granica, x=1, n=0, wynik; printf("\nPodaj numer od ktorego ma zaczynac sie ciag: "); scanf("%d", &dolna_granica); printf("\nPodaj numer na ktorym ma konczyc sie ciag: "); scanf("%d", &gorna_granica); if(dolna_granica>gorna_granica) { printf("\nBledne dane-koniec programu"); exit( 0 ); } ciag(dolna_granica, gorna_granica, wynik, x, n); return 0; } int ciag(int dolna_granica, int gorna_granica, int wynik, int x, int n) { if(dolna_granica>n) return ciag(dolna_granica, gorna_granica, wynik=x+pow((-1),(n+1))*1/(n+1), x=wynik-x, n=n+1); if(n<=gorna_granica) { printf("\n%d", wynik); return ciag(dolna_granica, gorna_granica, wynik=x+pow((-1),(n+1))*1/(n+1), x=wynik-x, n+1); } else exit(0); }
|
bathory0xff |
» 2016-01-10 14:32:31 Napisałem sobie to co masz zrobić (w C) i otrzymałem ciąg o wartościach z przedziału <0,1>, więc zmienne int możesz sobie już zamienić od razu na double. Poza tym, wzór jest co prawda rekurencyjny, ale to nie znaczy że trzeba wywoływać funkcje rekurencyjnie. Radziłbym ci raczej robić to w pętlach. Dwie zmienne double x0=x1=1 na początek i potem obliczasz ze wzoru x1 i przypisujesz x0=x1. I twoja funkcja... jest to niby int, ale wywołujesz ją jako void. Radziłbym ci napisać to wszystko od nowa, tym razem bez niekoniecznej rekursji. |