PDA

View Full Version : [c++] funzione ricorsiva


folk3n
09-02-2006, 11:29
ciao a tutti.
qualcuno può gentilmente aiutarmi come faccia questo programmino a restituire in output 1 2 3??? :confused:


#include<iostream>
using namespace std;
void conta(int n){
if(n>0)
{
conta(n-1);
cout<<n;
}
}
int main(){
conta(3);
system("pause");
return 0;
}

ps: io uso Dev-c++ 4.9.8.0
ho letto anche alcune pagine a riguardo, ma nn avevo mai visto niente del genere. potete spiegarmi come funziona???

grazie in anticipo :D
saluti

Ziosilvio
09-02-2006, 11:40
Qui non si tratta tanto del linguaggio, quanto dei fondamenti.

Sai cosa vuol dire che una funzione è ricorsiva?
Vuol dire che, durante la propria esecuzione su un input, può adoperare i risultati delle sue esecuzioni su input diversi.

Se tieni a mente la definizione, e ricordi il funzionamento del passaggio degli argomenti per valore, allora è abbastanza chiaro come fa conta(3) a produrre l'output "123".
Fai un piccolo sforzo...

andbin
09-02-2006, 12:01
Vuol dire che, durante la propria esecuzione su un input, può adoperare i risultati delle sue esecuzioni su input diversi. :mbe:

Una funzione ricorsiva è una funzione che dal suo interno richiama se stessa.

Ziosilvio
09-02-2006, 12:20
Una funzione ricorsiva è una funzione che dal suo interno richiama se stessa.
E che differenza ci sarebbe tra le due definizioni?

andbin
09-02-2006, 12:33
E che differenza ci sarebbe tra le due definizioni?
"... durante la propria esecuzione su un input ..."
"... delle sue esecuzioni su input diversi ..."

Cosa sarebbero e cosa intendi per "esecuzione su un input" e per "input diversi"???

tomminno
09-02-2006, 13:19
Questo è un argomento abbastanza basilare, senza capire come lavorano le funzioni si va da poche parti.
In ogni caso basta seguire passo passo l'esecuzione per capire come mai in uscita si ottinene 123
main chiama conta(3)
conta(3) entra nell'if e chiama conta(2)
conta(2) entra nell'if e chiama conta(1)
conta(1) entra nell'if e chiama conta(0)
conta(0) non entra nell'if e termina
conta(1) prosegue nell'esecuzione con cout << 1 e termina
conta(2) prosegue nell'esecuzione con cout << 2 e termina
conta(3) prosegue nell'esecuzione con cout << 3 e termina
...

folk3n
11-02-2006, 13:26
ok capito perfettamente grazie a tutti. in particolare a tomminno per la semplicità ed immediatezza nella spiegazione

saluti