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

exited, segmentation fault - C++

0 głosów
936 wizyt
pytanie zadane 16 grudnia 2019 w C i C++ przez kvlike Nowicjusz (170 p.)

Mam problem. Mianowicie po wpisaniu wejścia wyskakuje mi błąd: exited, segmentation fault. Prawdopodobnie wynika on z tego, że funkcja wywołuje sama siebie, ale jakoś nie chce mi się w to wierzyć. Zależy mi na jak najszybszej odpowiedzi. Oto kod:

#include <iostream>

using namespace std;

long long int par(long int n){
    return 10 * par(n / 5) + (n % 5) * 2;
}

int main() {
  long int n;
  cin>>n;
  cout<<par(n);
  return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 16 grudnia 2019 przez profesorek96 Szeryf (91,420 p.)
wybrane 16 grudnia 2019 przez kvlike
 
Najlepsza
Z założenia funkcja może wywoływać sama siebie. Takie coś nazywamy rekurencją. Jednak w każdej funkcji rekurencyjnej musi być tak zwany warunek stopu, ty takiego warunku nie masz. Twoja funkcja wywołuje się w nieskończoność.
komentarz 16 grudnia 2019 przez kvlike Nowicjusz (170 p.)

Dodałem warunek, że n musi być różne od 0, ale teraz wyskakuje następujący error: exited, illegal instruction

#include <iostream>

using namespace std;

long long int par(long int n){
  if(n!=0){
    return 10 * par(n / 5) + (n % 5) * 2;
  }
}

int main() {
  long int n;
  cin>>n;
  cout<<par(n);
  return 0;
}

 

komentarz 16 grudnia 2019 przez profesorek96 Szeryf (91,420 p.)
Dodałeś dobrze i masz warunek stopu. Jednak nie jest to poprawne ponieważ co jeśli n==0 a no to że funkcja nic nie zwróci a przecież masz funkcje która zawsze zwraca liczbę typu long int.
komentarz 16 grudnia 2019 przez kvlike Nowicjusz (170 p.)

@profesorek96, już naprawiłem problem. Funkcja nie miała co zwracać, kiedy n == 0. Teraz działa jak należy. Dziękuję za pomoc. Pozdrawiam.

#include <iostream>

using namespace std;

long long int par(long int n){
  if(n!=0){
    return 10 * par(n / 5) + (n % 5) * 2;
  }
  else{
    return 0;
  }
}

int main() {
  long int n;
  cin>>n;
  cout<<par(n);
  return 0;
}

 

komentarz 17 grudnia 2019 przez profesorek96 Szeryf (91,420 p.)
Dokładnie tak :)

Podobne pytania

0 głosów
1 odpowiedź 811 wizyt
pytanie zadane 12 marca 2020 w C i C++ przez kvlike Nowicjusz (170 p.)
+1 głos
1 odpowiedź 410 wizyt
pytanie zadane 17 lutego 2022 w C i C++ przez Yaqbek Nowicjusz (160 p.)
0 głosów
1 odpowiedź 350 wizyt
pytanie zadane 18 listopada 2018 w C i C++ przez Ptaszor3 Użytkownik (900 p.)

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,324 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...