• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rekurencja, podstawy

Object Storage Arubacloud
0 głosów
569 wizyt
pytanie zadane 27 lutego 2019 w C i C++ przez Teslum_369 Gaduła (4,190 p.)

Witam,

Od tak dziś postanowiłem pogłębiać tajniki  rekurencji. Nie mam za dużego doświadczenia w tym. Chciałbym zapytać, dlaczego kompilator wyświetla mi się do momentu wczytania, a po nim następuje zamknięcie okna. Przyznam, że trochę się już męczę nad znalezieniem błędu więc postanowiłem napisać tutaj. Oto kod:

#include <iostream>

auto licz(int n) -> int;
//************************************
int main()
{
  std::cout << "Funkcja licząca liczby naturalne od 0 do n.\nPodaj n: ";
    int n{};
      std::cin >> n;


  int licznik{0};
      while(licznik < n)
      {
        std::cout << " " <<  licz(licznik);
        
        licznik++;
      }
  

 std::cin.ignore();
 getchar();
 return 0;
}
//************************************
auto licz(int n) -> int
{
  return n+licz(n-1);
}

Wiem, że można wykonać to "od tyłu" - dekrementować podaną na początku liczbę  sumując n (jest to trochę łatwiejszy sposób, natomiast chciałbym to zrobić "od przodu" - użyłem do tego while, aby inkrementować liczby od zera aż do liczby podanej.

Z góry bardzo dziękuję za pomoc!

komentarz 27 lutego 2019 przez RafalS VIP (122,820 p.)

Z czystej ciekawości:

auto licz(int n) -> int;

czemu w taki sposób?

komentarz 27 lutego 2019 przez Teslum_369 Gaduła (4,190 p.)

Dlaczego? A no właśnie dlatego, że mało osób stosuje taki zapis (albo inaczej mówiąc, jest więcej tych którzy zapisują np. int funkcja()). Ja lubię unikalność, odmienność i "zapomniane ścieżki". To powód dlaczego stosuję taki zapis smiley.

Również (wtedy, gdy mogę) stosuję zakresową pętlę for niż prawdziwe for.

komentarz 27 lutego 2019 przez niezalogowany
Ten zapis bardziej by się nadawał przy lambdach, lub niektórych szablonach. Tak samo range-based loop w pewnych przypadkach może być gorszym rozwiązaniem od for (chociaż zazwyczaj lepsze jest to pierwsze). Lepiej zamiast zapomnianych ścieżek kierować się zastosowaniem i praktycznością. Chociaż nie ma nic złego w ćwiczeniu sobie różnych zapisów ;)

1 odpowiedź

0 głosów
odpowiedź 27 lutego 2019 przez Teslum_369 Gaduła (4,190 p.)
Znalazłem rozwiązanie, piszę je, ponieważ ktoś inny również może nie wiedzieć.

Należy we funkcji dopisać warunek:

  if(n == 0) return 0;

Ponieważ dla zera return byłby ujemny.
komentarz 27 lutego 2019 przez criss Mędrzec (172,590 p.)
Generalnie każda funkcja rekurencyjna musi mieć jakiś warunek wyjścia. Bez tego będzie się wywoływać tak długo aż stosu zabraknie.
komentarz 27 lutego 2019 przez Teslum_369 Gaduła (4,190 p.)

Tak wiem, jest to tzw. przypadek podstawowy czyli złota zasada rekurencji - zacznij właśnie od tego przypadku laugh.

Podobne pytania

0 głosów
2 odpowiedzi 204 wizyt
pytanie zadane 12 listopada 2016 w C i C++ przez Hanuku Nowicjusz (140 p.)
0 głosów
1 odpowiedź 292 wizyt
pytanie zadane 1 czerwca 2016 w C i C++ przez s3b41997 Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 346 wizyt
pytanie zadane 29 marca 2016 w C i C++ przez Proszek73 Obywatel (1,140 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...