Accade qualcosa di strano

Principe2
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);}
}

Risposte
Studente Anonimo
Studente Anonimo
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;
}

Principe2
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

Nidhogg
"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!

Principe2
ok, grazie

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.