pawelekster Temat założony przez niniejszego użytkownika |
procedura rekurencyjna z jednym argumentem tablicowym » 2010-11-18 20:24:25 Proszę o pomoc, przykład prostej rekurencji typu:
void przyklad(int tab[]) |
|
F90M |
» 2010-11-18 20:35:41 Silnia long Silnia( int n ) { if( n < 1 ) return 1; else return n * Silnia( n - 1 ); } |
|
pawelekster Temat założony przez niniejszego użytkownika |
argument tablica? » 2010-11-18 20:47:04 long Silnia( int n ) { if( n < 1 ) return 1; else return n * Silnia( n - 1 ); }
argumentem ma być tablica jednowymiarowa... |
|
F90M |
» 2010-11-18 21:20:18 Pośpieszyłem się... Odwracanie tablicy void OdwrocTablice( int iTablica[], int iIloscElenentow ) { if( iIloscElenentow < 2 ) return; int iTmp = iTablica[ 0 ]; * iTablica = iTablica[ iIloscElenentow - 1 ]; iTablica[ iIloscElenentow - 1 ] = iTmp; OdwrocTablice( iTablica + 1, iIloscElenentow - 2 ); }
Są dwa argumenty, ale nic innego, z samą tablicą, do głowy mi nie przychodzi. |
|
pawelekster Temat założony przez niniejszego użytkownika |
» 2010-11-18 21:29:35 Są dwa argumenty, ale nic innego, z samą tablicą, do głowy mi nie przychodzi.
Czy może dałoby się tablicę zmniejszyć o jeden element i wywołać procedurę odwołującą się do już zmniejszonej tablicy? |
|
pawelekster Temat założony przez niniejszego użytkownika |
» 2010-11-18 21:55:51 Można niby tak:
#include<stdio.h> #include<iostream> #include<conio.h> using namespace std;
int elementy[] = { 2, 3, 4, 9, 1, 4, 5 }; int n = sizeof( elementy ) / sizeof( int ); int i = 0;
void wypisz_rekurencyjnie( int tab[] );
int main() { wypisz_rekurencyjnie( elementy ); getch(); return 0; } void wypisz_rekurencyjnie( int tab[] ) { if( i < n ) { cout << tab[ i ] << endl; i++; wypisz_rekurencyjnie( tab ); } }
??? |
|
F90M |
» 2010-11-18 21:57:31 Czy może dałoby się tablicę zmniejszyć o jeden element i wywołać procedurę odwołującą się do już zmniejszonej tablicy? |
W tym wypadku musisz przekazać do funkcji wielkość tablicy, inaczej skąd funkcja ma wiedzieć kiedy skończyć. Edit: Oczywiście możesz tak zrobić, ale używanie do tego zmiennych globalnych to raczej nie jest dobre rozwiązanie. |
|
pawelekster Temat założony przez niniejszego użytkownika |
» 2010-11-18 22:06:34 W tym wypadku musisz przekazać do funkcji wielkość tablicy, inaczej skąd funkcja ma wiedzieć kiedy skończyć.
Powyższy kod skompilowałem i zadziałał.
Wprowadzone są dwie zmienne globalne i, n , któte są "widziane" w kodzie procedury - trochę sztucznie, ale działa... Tak samo samą tablicę zdefiniowałem globalnie, ale to nie musi tak być.
Całość jest bardziej rekurencją, ale być może chodzi o "sztukę dla sztuki", aby akurat zdefiniować rekurencyjnie (wywołanie rekurencyjne) |
|
« 1 » 2 |