[C++] Funkcja rekurencyjna z tablicą
Ostatnio zmodyfikowano 2018-05-29 10:14
Giero97 Temat założony przez niniejszego użytkownika |
[C++] Funkcja rekurencyjna z tablicą » 2018-05-28 22:02:45 Witam mam zadanie: Napisz rekurencyjną funkcję sprawdzającą czy wśród elementów tablicy są liczby mniejsze od 2. Parametrami funkcji są tablica i liczba elementów. Tu mój kod, problem z tym że czy w tablicy są elementy większe czy mniejsze od 2 to i tak wyświetla prawdę : bool czyMniejsza( int tab[], int n ) { if( n == 1 ) { if( tab[ 0 ] < 2 ) { return true; } } else { if( tab[ n ] < 2 ) { return true; } else if( tab[ n ] > 2 ) return false; czyMniejsza( tab, n - 1 ); } }
|
|
zeszyt |
» 2018-05-28 22:46:23 Zastanów się jak długo rekurencyjnie wywoływać funkcje (hint: Pomyśl nad pierwszym warunkiem.). |
|
pekfos |
» 2018-05-29 02:21:45 Logika tego kodu mówi, że nie potrafisz tego zrobić nawet zwykłą pętlą, więc najlepiej zacznij od tego. Zmiana algorytmu iteracyjnego na rekurencyjny jest w tym przypadku trywialna. |
|
michal11 |
» 2018-05-29 09:07:12 Twoja funkcja sprawdza w zasadzie tylko czy ostatni element tablicy jest większy czy mniejszy od 2. Co ciekaw powinieneś dostać jakiś błąd kompilatora ew. warning bo twoja funkcja w przypadku gdy ostatni element tablicy jest równy 2 nie ma zdefiniowane co ma zwracać (wydaje mi się, że jest to UB ale to ktoś mądrzejszy musiałby potwierdzić). |
|
jankowalski25 |
» 2018-05-29 10:01:25 wydaje mi się, że jest to UB ale to ktoś mądrzejszy musiałby potwierdzić |
Jak najbardziej, to jest UB (dlatego, że nie ma żadnego return dla dwójki). if( tab[ n ] < 2 ) { return true; } else if( tab[ n ] > 2 ) return false; |
Nie, nie i jeszcze raz nie. Pisanie w stylu if( warunek ) { return true; } else if( !warunek ) return false; można uprościć do zwykłego return warunek; (nie dość że krócej, to jeszcze nie trzeba się męczyć z warunkiem przeciwnym, gdzie łatwo na przykład zapomnieć o znaku równości). |
|
pekfos |
» 2018-05-29 10:14:45 |
|
« 1 » |