Bien, muy bien, has hecho un seguimiento del flujo de datos del programa para ver que hace cada linea; es una buena practica.
Una cosa: en el codigo que has colgado hay un error de corchetes, debes solucionarlo antes de seguir.
Lo que te interesa: como manipulas 'b' para que sea accesible desde main() y desde tam(). La solucion está en las referencias. Si no tienes claro el tema de referencia / desreferencia de valores es mejor que le eches un vistazo. La idea es la siguiente: declaras una variable 'b' en el main y envias una referencia a 'tam()', de forma que dentro de tam() vas a incrementar esa referencia en vez de trabajar con una variable declarada en el ambito de tam(), ok?
Ahora como estas trabajando sobre la referencia ya puedes olvidarte de los valores retornados, es decir que la funcion será de tipo void y puedes quitar todos los return.
Basicamente harás lo siguiente:
Código:
void tam(double a, int *b) {
(si se cumple el condicional) {
incrementa la referencia;
recursion;
}
}
No te dejo el codigo resuelto porque esa es tu tarea ok? Lo de copiar/pegar sería demasiado facil :)
Observa bien el orden de ejecucion de esto que te he colgado y contrastalo con lo que tienes en tu ultimo codigo: primero haces el incremento, luego llamas a la funcion (tu lo hiciste del revés y lo puesiste debajo del return, es decir que las lineas 13, 14, 15 nunca llegaban a ejecutarse).
Aun otra cosa que no has tenido en cuenta: el tamaño nunca será negativo ni de coma flotante verdad? Puedes declarar 'b' como entero no signado. Si acaso esto dejalo para el final.
Lo que yo haría es lo siguiente y en este orden: corregir el codigo para que compile sin errores, implementar la funcion tam() con referencias, implementar la llamada a la funcion tam() con referencias, y asegurarme que compila sin errores.
Una ultima observación: si estas trabajando con esta funcion para resolver el tamaño de un valor es mejor que uses el codigo que colgó Fw190 con el bucle while y sin recursión; si por el contrarion estas trabajando con esta funcion como practica para el tema de recursividad no te queda otra opcion que resolver de esta forma (puedes usar globales estaticas, aunqué es mas facil es poco elegante y ya ni te lo comento).
Saludos
vosk