Hola! ¿Cómo están?
Una consulta... ,cuando indica "mostrar" la idea es sólo probar el programa para un número menor a 1000?
Por ejemplo para collatz(999) obtengo 50 pasos y para collatz(1001) obtengo 101 pasos
Lo que no entiendo si el ejercicio pide algún tipo de deducción a partir de lo anterior...
por ejemplo: si aplicamos la función a una potencia de 2, nos devuelve el listado decreciente de todas las potencias...
collatz(1024) = [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1]
Con respecto a la consulta de Martín, a mi me corre en menos de un segundo... intenté interpretar tu función pero no entiendo porqué usas el largo...
mi codigo (por si te sirve para comparar) es:
function collz = collatz(m) %comienzo funcion principal
n = 100;
a = []; % (vector dinámico)
a(1) = m;
% defino la funcion f dentro de mi funcion collatz
function fcoll = f(m)
if (mod(m,2) == 0)
fcoll = m/2;
else
fcoll = 3*m + 1;
endif
endfunction
% luego hago un for hasta los 100 valores pero con un break por si llego antes al 1
for i = 1:n
a(i+1) = f(a(i));
if (a(i+1) == 1);
break;
endif
endfor
% por ultimo devuelvo el vector "a"
collz = a;
end % funcion principal
Gracias
Saludos
Una consulta... ,cuando indica "mostrar" la idea es sólo probar el programa para un número menor a 1000?
Por ejemplo para collatz(999) obtengo 50 pasos y para collatz(1001) obtengo 101 pasos
Lo que no entiendo si el ejercicio pide algún tipo de deducción a partir de lo anterior...
por ejemplo: si aplicamos la función a una potencia de 2, nos devuelve el listado decreciente de todas las potencias...
collatz(1024) = [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1]
Con respecto a la consulta de Martín, a mi me corre en menos de un segundo... intenté interpretar tu función pero no entiendo porqué usas el largo...
mi codigo (por si te sirve para comparar) es:
function collz = collatz(m) %comienzo funcion principal
n = 100;
a = []; % (vector dinámico)
a(1) = m;
% defino la funcion f dentro de mi funcion collatz
function fcoll = f(m)
if (mod(m,2) == 0)
fcoll = m/2;
else
fcoll = 3*m + 1;
endif
endfunction
% luego hago un for hasta los 100 valores pero con un break por si llego antes al 1
for i = 1:n
a(i+1) = f(a(i));
if (a(i+1) == 1);
break;
endif
endfor
% por ultimo devuelvo el vector "a"
collz = a;
end % funcion principal
Gracias
Saludos