Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Funkcja rekurencyjna z tablicą

Ostatnio zmodyfikowano 2018-05-29 10:14
Autor Wiadomość
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ę :
C/C++
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 );
       
    }
}
P-171293
zeszyt
» 2018-05-28 22:46:23
Zastanów się jak długo rekurencyjnie wywoływać funkcje (hint: Pomyśl nad pierwszym warunkiem.).
P-171295
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.
P-171298
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ć).
P-171299
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).

C/C++
if( tab[ n ] < 2 )
{
    return true;
}
else if( tab[ n ] > 2 ) return false;
Nie, nie i jeszcze raz nie. Pisanie w stylu
C/C++
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).
P-171300
pekfos
» 2018-05-29 10:14:45
jankowalski25: Te warunki nie są przeciwne. Ale zgadzam się, takie pisanie nie ma żadnego sensu. Zwracanie wartości jest w złych miejscach, bo najwyraźniej autor tematu nie potrafi zaimplementować kwantyfikatorów logicznych, co nie jest specjalnie niezwykłe - Ten problem nadawałby się do FAQ..
 
//edit: » Kurs C++ / FAQJak sprawdzić, czy wszystkie elementy spełniają warunek / czy istnieje element spełniający warunek? pytanie/odpowiedź
P-171301
« 1 »
  Strona 1 z 1