Accade qualcosa di strano
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
#include
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);}
}
#include
#include
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);}
}
Risposte
Prova così:
#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; }
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
"ubermensch":
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!
ok, grazie