Newsgroup: it.comp.lang.c
Titolo: Funzione ricorsiva che genera errori.

Giusta l'ultima questione sulle funzioni, lo giuro :)
la seg. funzione ricorsiva mi genera errori e Win2000 la termina; forse il
problema lo genera printf non credo scanf:
#include <stdio.h>
/* funzione ricorsiva con input dell'utente */
int ricorsiva(int x);
int input, risultato;
int main()
{
      printf("Inserire un numero: ");
      scanf("%d", &input);
      risultato=ricorsiva(input);
      printf("\n3 alla potenza di %d č:", ricorsiva(input));
      system("PAUSE");
      return 0;
}
int ricorsiva(int x)
{
     if (input == 1 )
        return 1;
     else
        return (3*(ricorsiva(x-1)));
}


wrote:
questa č la funzione ricorsiva da fare... 
int potenza(int x)
{
	if (x == 1)
		return 3;
	else
		return (3*potenza(x-1));
}
tu hai messo if (input == 1) e non č certo una gran trovata, ti rendi
conto che hai creato una ricorsione infinita?

 conto che hai creato una ricorsione infinita?
Ciao, sto appena al terzo giorno di studio! Puoi spiegarmi perchè ho
generato una ricorsione infinita?
Input non è una variabile qualsiasi da passare come parametro alla funzione?
Grazie cmq :)

funzione?
input è la variabile che hai passato come parametro ma non va usata
nella funzione. l'hai dichiarata come variabile globale ma non era
necessario, bastava dichiararla nel main.
ciao

 necessario, bastava dichiararla nel main.
si infatti, questo brutto vizio me lo devo levare da subito....cmq è un
vizio che sto prendendo dal testo di studio :(
Grazie mille Alan, e buon lavoro!

un vizio che sto prendendo dal testo di studio :(
non è sbagliato usare variabili globali... io cerco in ogni caso di 
farne a meno ma se servono...
ciao

 farne a meno ma se servono...
Si puo' sicuramente fare sempre a meno delle variabili
globali.
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

globali.
Huckleberry Finn ha ragione, le variabili globali possono essere
evitate e in genere vanno evitate per vari motivi, uno e' la
leggibilita' del codice per esempio.
Le variabili globali in genere si usano per diciamo delle costanti, o
comunque oggetti che tu crei una volta, magari anche con valori di
default, e che poi devono essere usate da tante altre funzioni.
Per esempio errno e' una variabile globale, perche' usata da una
miriade di funzioni.
In molti programmi che scrivono su file, potrai trovare il nome del
file (magari quello di default, poi liberamente ridefinibile da
utente) in una variabile globale.
Mox :)

 default, e che poi devono essere usate da tante altre funzioni.
Beh, se il programma è modulare, ovvero scritto su più file, l'uso di
variabili globali può essere utile.
Fly

variabili globali puň essere utile.
Niente affatto, anzi, puo' essere esattamente il contrario.
L'uso delle variabili globali e' sempre sostituibile con
qualcosa di meglio.


questo "sempre" mi pare inopportuno....un po' come le risposte dei quiz per
la patente....quando c'è il sempre vuol dire che la risposta è falsa nel 99%
dei casi......
Fly

questo "sempre" mi pare inopportuno....
Nel caso delle variabili globali il "sempre" ci sta tutto.

 Nel caso delle variabili globali il "sempre" ci sta tutto.
tutte le generalizzazioni (compresa questa ;-) sono false. Ci sono casi 
e casi; spessissimo le variabili globali sono inopportune, ma ci sono 
dei casi in cui possono semplificare il tutto; la libreria standard del 
C ti offre qualche esempio: pensa a errno e a stdin, stdout, stderr 
(che a essere pignoli non sono variabili, ma il senso e' quello).
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

C ti offre qualche esempio
Il fatto che la libreria standard utilizzi delle variabili
globali non e' motivo sufficiente per farne uso.  Le
variabili globali sono sempre evitabili, sopratutto in C in
cui puoi localizzare le funzioni e le variabili nei diversi
moduli (grazie alle static).

 qualcosa che preservi la cosiddetta "information hiding".
cosa c'entra l'information hiding con le variabili globali?
Ricapitoliamo quali sono le caratteristiche delle variabili globali:
- lifetime corrispondente a quello del programma
- visibilita' da parte di tutti i moduli e tutte le funzioni
Se io, dopo aver analizzato il problema, mi accorgo di avere bisogno di 
memorizzare dati visibili a tutti i moduli e con una lifetime pari a 
quella del programma le variabili globali sono l'elemento del 
linguaggio che meglio modellano il mio problema, percio' non vedo 
perche' non utilizzarle.
Se poi mi dici che molto spesso *non* si ha bisogno di variabili con le 
caratteristiche delle var. glob. e che in quei casi se ne puo' fare a 
meno, allora sono d'accordo (non mi ricordo di aver mai utilizzato 
variabili globali nei miei programmi). Pero' ci sono dei casi in cui 
queste caratteristiche sono indispensabili: pensa ad esempio ai 
dispositivi di I/O: sia il C (stdin/out/err) che il C++ 
(cout/cin/cerr/clog) fanno ricorso a variabili globali e sinceramente 
non mi vengono in mente altri design alternativi.
