Accade qualcosa di strano

Messaggioda Valerio Capraro » 01/04/2006, 12:10

Il seguente programma calcola la parte intera inferiore di $lg_a(n)$. Come potete vedere facendolo girare, lo calcola bene. e solo quando deve ritornare il risultato dalla funzione al main si trasforma magicamente in -1!!!

#include<stdlib.h>
#include<stdio.h>

int in_inf_log(int a, int b, int n, int k);

main()
{
int a,n;
scanf("%d",&a);
printf("\n\n");
scanf("%d",&n);
printf("\n\n %d \n\n",in_inf_log(a,a,n,1));

system("pause");
return 0;
}

int in_inf_log(int a, int b, int n,int k)
{
if(a*b>n) {printf("\n%d\n\n",k);return k;}
else {k++;in_inf_log(a*b,b,n,k);}
}
Valerio Capraro
Advanced Member
Advanced Member
 
Messaggio: 1086 di 2911
Iscritto il: 03/02/2004, 23:58
Località: Southampton (UK)

Re: Accade qualcosa di strano

Messaggioda anonymous_be1147 » 01/04/2006, 13:11

Prova così:

Codice:
#include<stdlib.h>
#include<stdio.h>

int in_inf_log(int a, int b, int n, int k);

int
main()
{
      int a,n;
     scanf("%d",&a);
     printf("\n\n");
     scanf("%d",&n);
     printf("\n\n %d \n\n",in_inf_log(a,a,n,1));

     system("pause");
     return 0;
}

int in_inf_log(int a, int b, int n,int k)
{
    int ret;

   if(a*b>n) {printf("\n%d\n\n",k);ret = k;}
   else {k++;ret = in_inf_log(a*b,b,n,k);}
   
   return ret;
}
anonymous_be1147
Cannot live without
Cannot live without
 
Messaggio: 44 di 3226
Iscritto il: 02/03/2006, 20:20

Messaggioda Valerio Capraro » 01/04/2006, 13:52

cosi va bene.. grazie.. anche se non ho capito perchè il mio non girava.. fra l'altro ero riuscito ad aggiustarlo passando k per riferimento
Valerio Capraro
Advanced Member
Advanced Member
 
Messaggio: 1088 di 2911
Iscritto il: 03/02/2004, 23:58
Località: Southampton (UK)

Messaggioda Nidhogg » 01/04/2006, 14:28

ubermensch ha scritto:cosi va bene.. grazie.. anche se non ho capito perchè il mio non girava.. fra l'altro ero riuscito ad aggiustarlo passando k per riferimento


Molto probabilemente questo else {k++;in_inf_log(a*b,b,n,k);} è sbagliato, in quanto manca l'istruzione return. Prova con else {k++;return in_inf_log(a*b,b,n,k);}

Ciao!
"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." - Robert Firth
Nidhogg
Senior Member
Senior Member
 
Messaggio: 1192 di 1491
Iscritto il: 24/02/2004, 18:29
Località: Baronissi (Salerno) - Italia

Messaggioda Valerio Capraro » 01/04/2006, 15:43

ok, grazie
Valerio Capraro
Advanced Member
Advanced Member
 
Messaggio: 1090 di 2911
Iscritto il: 03/02/2004, 23:58
Località: Southampton (UK)


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite