Mi è stato mostrato un programma di esempio per dimostrare la ricorsione che sembra non dovrebbe funzionare ma lo fa. La logica è abbastanza chiara, ma perché funziona anche quando la chiamata di funzione ricorsiva non viene restituita? Sembra che il comando return
esca dallo stack anche se non è richiesto. È uno standard di linguaggio o una cosa gcc? L'ho visto con C e C++ compilato con gcc su Windows e Linux.Perché una chiamata di ritorno ricorsiva esce dallo stack senza un'istruzione di reso esplicita?
#include <iostream>
#include <cstdlib>
using namespace std;
int isprime(int num, int i)
{
if (i == 1) {
return 1;
}
else {
if (num % i == 0)
return 0;
else
isprime(num, i-1); // should be returned
}
}
int main(int argc, char** argv)
{
int input = atoi(argv[1]);
cout << input << "\t" << isprime(input, input/2) << "\n";
}
Il comportamento non definito include codice che funziona per errore. La chiamata alla funzione lascia il valore di ritorno nel registro cpu di destra. –
Non vedo il motivo del down-voting della domanda. È un discreto dubbio che molti principianti potrebbero avere. – varevarao
@varevarao: i "dubbi" dei principianti sono soddisfatti dallo sforzo di ricerca. Detto questo, ho svalutato. –