[c] Ciekawe, ciąg, jak zrobić w jednej funkcji rekurencję
Ostatnio zmodyfikowano 2015-03-25 21:09
Pietia Temat założony przez niniejszego użytkownika |
[c] Ciekawe, ciąg, jak zrobić w jednej funkcji rekurencję » 2015-03-24 15:36:07 Zadanie jest takie, trzeba napisać funkcję rekurencyjną, która dla otrzymanej w argumencie nieujemnej liczby całkowitej n zwraca wartość elementu o indeksie n ciągu zdefiniowanego w następujący sposób a0=a1=1 an=an-1+n dla n parzystych an=an-1*n dla n nieparzystych (n, n-1 to indeksy dolne w tym zapisie) Wiem jak to zrobić rozkładając na 2 funkcje(kod poniżej), nie mam pojęcia jak zrobić taką rekurencję w 1 funkcji, ponieważ kiedy daję n-1 w parzystej liczbie to zamienia się w nieparzystą i wszystko się sypie... # include <stdio.h>
int ciag( int n ); int ciag2( int n );
int main() { int n; printf( "Podaj n\n" ); scanf( "%d", & n ); if( n % 2 == 0 ) printf( "Oto jest ciag2(n): %d\n", ciag( n ) ); else printf( "Oto jest ciag(n): %d\n", ciag( n ) ); return 0; }
int ciag( int n ) { if( n == 0 ) return 0; switch( n ) { case 1: return 0; case 2: return 2; default: { return( ciag( n - 1 ) * n ); } } }
int ciag2( int n ) { if( n == 0 ) return 0; switch( n ) { case 1: return 0; case 2: return 2; default: { return( ciag2( n - 1 ) + n ); } } }
próbowałem zrobić tak ale wyniki są złe # include <stdio.h>
int ciag( int n );
int main() { int n; printf( "Podaj n\n" ); scanf( "%d", & n ); printf( "Oto jest ciag(n): %d\n", ciag( n ) ); return 0; }
int ciag( int n ) { if( n == 0 ) return 0; if( n % 2 == 0 ) { switch( n ) { case 1: return 1; case 2: return 2; default: return( ciag( n - 1 ) + n ); } } else { switch( n ) { case 1: return 0; case 2: return 2; default: { return( ciag( n - 1 ) * n ); } } } }
|
|
pekfos |
» 2015-03-24 19:11:58 if( n % 2 == 0 ) printf( "Oto jest ciag2(n): %d\n", ciag( n ) ); else printf( "Oto jest ciag(n): %d\n", ciag( n ) );
|
No i niby masz w jednej funkcji. |
|
Pietia Temat założony przez niniejszego użytkownika |
» 2015-03-25 12:37:08 Niby:-) n-1 sprawia, że liczba jest na zmianę traktowana jak parzysta i nieparzysta, a nie o to chodzi. |
|
darko202 |
» 2015-03-25 13:25:57
int ciag( int n ) { if( n == 0 ) return 1; if( n == 1 ) return 1; if( n % 2 == 1 ) return( ciag( n - 1 ) * n ); else return( ciag( n - 1 ) + n );
|
|
Pietia Temat założony przez niniejszego użytkownika |
» 2015-03-25 14:34:47 Rozumiem, ale dlaczego wobec tego te dwa programy, dają inne wyniki? |
|
Monika90 |
» 2015-03-25 19:50:14 Bo pierwszy z nich jest błędny. |
|
Pietia Temat założony przez niniejszego użytkownika |
» 2015-03-25 21:09:02 Heh, myślałem, że drugi. W każdym razie dzięki:-) |
|
« 1 » |