Está en la página 1de 38

Informática

Tema I1I - Bucles

Ángela Muñoz de Yraola


Escuela Técnica Superior de Ingenieros Navales
Universidad Politécnica de Madrid
Bucles

Break

Relaciones de
recurrencia

Bucles con condición


sin índice

Función recursiva
Bucles

Los Bucles Permiten automatizar tareas repetitivas

Se utilizan para ejecutar un bloque de instrucciones:


“cuerpo del bucle”, de forma reiterada sin tener que
repetir varias veces el mismo código

Sintaxis:

➤ for - end
➤ While-end
⟳ Bucles Simples
Permite repetir un número determinado de veces
un conjunto de instrucciones

for i=1:m:n El índice i tomará valores


desde 1 hasta n inclusive,
cuerpo del bucle
mediante saltos de m
end unidades.

La variable i va tomando los valores de las


componentes de un ”vector” de números naturales
de la forma inicial : incremento : nal

Si se omite el valor m, el incremento por defecto


es 1

El bucle se repite tantas veces como la dimensión


del ”vector”
fi
for i=1:n
for i=1:2:n
cuerpo del bucle
cuerpo del bucle
end
end
ejecutará el conjunto de sentencias
del cuerpo del bucle n veces, para ejecutará el conjunto de sentencias
i=1,2,3,…,n del cuerpo del bucle para
i=1,3,5,…,n.
for i=n:-1:1 Si al incrementar de 2, en 2, el índice
cuerpo del bucle no coincide con n, se ejecuta para
el índice inmediatamente inferior
end pero nunca superior
ejecuta el conjunto de sentencias Por ejemplo: for i=1:2:6 se ejecutará
también n veces, pero en orden para 1,3,5
inverso: i=n,n-1,...,1.
⟳ Bucles Condicionales

Permite repetir un conjunto de instrucciones en


tanto se satisfaga una condición lógica

while condición El cuerpo de un bucle se


cuerpo del ejecutará mientras la
bucle condición que acompaña al
comando while sea cierta
end
for vs while

for while
las iteraciones se realizan mientras el índice las iteraciones se realizan basándose en
recorre una serie de valores y no necesita ni condiciones que pueden ser más complejas que
debe ser actualizado dentro del bucle un simple índice

Tiene una sintaxis muy sencilla y fácil de La sintaxis puede ser muy complicada
entender
Es muy potente ya que permite iterar con
Es adecuada para el trabajo con vectores y condiciones que el programador puede
matrices combinar

Es muy e ciente al incorporar en una sola Se corre el riesgo de tener “bugs” difíciles de
sentencia el incremento del bucle y la encontrar ó bucles in nitos o nulos
condición de salida del bucle
Si el programa entra en un bucle in nito.
Siempre tiene un nal Ctrl+C corta el bucle
fi
fi
fi
fi
Ejemplo
Suma de los números naturales entre 1 y un valor genérico n

% t3_forsuma t3_whilesuma
% Suma de naturales de 1 a n con for % Suma de naturales d%e 1 a n con while
function suma=t3_forsuma(n) function suma=t3_whilesuma(n)
suma=0; suma=0;
for i=1:n i=1;
suma=suma+i; while i<=n
end suma=suma+i;
end i=i+1;
El índice i se inicia en 1 y llega hasta n
end
Cuando pasa otra vez por el principio del bucle,
toma el siguiente valor que le corresponde en la end
secuencia
Bucles

Break

Relaciones de
recurrencia

Bucles con condición


sin índice

Función recursiva
Uso del comando pause

El comando pause permite Ejemplo


interrumpir la ejecución y
Suma de los números naturales entre
espera que el usuario pulse la
tecla intro, para continuar la
1 y un valor genérico n
ejecución del programa
% t3_fsuma
% Suma de naturales entre 1 y n
function suma=t3_fsuma(n)
suma=0;
i=1;
Si se introduce el comando while i<=n
pause en el bucle y se elimina suma=suma+i;
el punto y coma “;” al final de i=i+1
las sentencias, se comprueba pause
la evolución de las variables. end
Para continuar se pulsa intro end
Uso del comando break

Ejemplo
El comando break interrumpe la
ejecución de un bucle cuando función que recibe un número natural
en el cuerpo del mismo se y devuelve el mayor número divisor
cumpla una determinada exacto del número dado
condición y no sea necesario % t3_fdivisor
seguir ejecutando dicho bucle
% máximo divisor de num
% ejemplo de uso de break
function div=t3_fdivisor(num)
rompe el bucle for ó while y sale div = num - 1;
del mismo while div>=1
if mod(num,div)==0
break;
El bucle recorre todos los end
posibles divisores del número. Basta
con que la condición se cumpla una vez para div=div-1;
que no haga falta continuar el bucle, y
podamos asegurar que div es el mayor
end
divisor end
Siempre hay un divisor máximo: uno
Ejemplo El bucle recorre todos los posibles
divisores del número
función que devuelve un valor 1 ó 0 Basta con que la condición se
dependiendo de que el número que cumpla una vez para que no haga
introducimos como argumento sea o falta continuar el bucle y podamos
no primo asegurar que el número no es
primo devolviendo por tanto un
cero
% t3_fesprimo
% devuelve 1 si el número es
% primo y 0 si no
% uso de break Los divisores de un número no
function primo son menores o iguales que
primo=t3_fesprimo(numero) su raíz cuadrada. Si un número no
primo=1; los tiene, es porque es primo
i=2;
while i<=sqrt(numero)
if mod(numero,i)==0
primo=0; MATLAB tiene la función específica
break; isprime que
end devuelve un 1 si el número es
i=i+1; primo y un 0 si no lo es
end
end
Ejercicios
1. Codifica una función que reciba dos números naturales, m y n, con m < n por
<latexit sha1_base64="03hNlDn5IsIfvvNHnyItr7L28Pk=">AAAG+nictVXLTlNBGP5BW7HeQJduTqQmELBpiyALSYhsXGIil4QSMmc6pUfOzTNziE3tE/gWujLqzsfwBVz6DO5c+c1/ptBScOdpzsx/nf/7L3Pqp2GgTb3+c2r62vVS+cbMzcqt23fu3pudu7+rkzyTakcmYZLt+0KrMIjVjglMqPbTTInID9Wef7Jl9XunKtNBEr82vVQdRuI4DjqBFAaiZG76A7UopoQCrG1SWA151IfUpw6oBtVogH0LNm1YdfBKEpDksLV7hykJ+W/sHr0Fr7BnWK3UZ6s2/DX2mP5QBE12xgtEzMELCiHXtAxpFTZV7D2mY7xWKuETO+1zlnqUQpZh7yJSCgSGzwjcOT2OrOiUMYXYLZaQVw1Z5LApll6FyHN1ydjucmwB1yCEX4+tbb6Fn8d1k0A4HlVcelYN1LbLSdEbvBHystiW2TtwXhu0Mua5QavM2yyL2ttIIVALh0Vz1X+x/Qot0VO8q/BrUJPjtvCr4PfveVj5z/Ngrc7rXgVt8/Y5t/P+C/Tfd5XPWTZ6zsUejs+QlUiuTdHNLmrQAmprK5GpD+kT7s8AXIx1WOfJSapAV4V3e8S/xV2KaQH8Imo8yi8h2qSseSYNuS4G2os2C6CeoFeLEyf44AukS9APGFGF8YVujmxdbK8SzirlGr0DH53NRtvNjeaODyf3fOLFyKwN625gZ08YznrVIShuZc7+RU9TWGVu5sejZ4yx5uYpclqfK1nMz+jUC3Sq7qJbHBs8uaN3oOm0V98Cm6l/dhOKO2G960CxSuuY7zV7G45m5+u1Oj/eJNFwxDy5Z/to9kerncg8UrGRodD6oFFPzWFfZCaQoRpUWrlWqZAn4lgdgIxFpPRhnz/gA+9xJ8k801Ue86O2fRFp3Yt82ETCdPVFnRVepjvITWf9sB/EaW5ULGECXScPPZN49n/AaweZkibsgRAyC4DSk12RCWnwb1FB+o2LyU4Su81aY6229qo5v/nCFWKGHtIjDGWDntEmvcSnbIdkaVD6VPpa+lZ+X/5Y/lz+UphOTzmfBzT2lL//BS9NZRs=</latexit>

hipótesis, y devuelva la suma de los naturales entre m y n, incluyendo en dicha


suma a m y n. Por ejemplo, si m = 3 y n = 5 el resultado será 3 + 4 + 5 = 12.

3. Codifica una función que reciba dos números reales a, b con a < b, un número
natural n, calcule h = b na y devuelva

sin(a) + sin(a + h) + sin(a + 2h) + . . . + sin(a + (n 1)h) + sin(b)


n+1
valor medio aproximado del seno entre a y b, tomando n + 1 puntos para aprox-
imarlo. Comprobación, si a = 0, b = 2 y n = 2, el resultado deberá ser 0.5836.
Ejemplo
El primer valor que
Bucles con incremento distinto de la unidad toma el índice i es 2
Suma de todos los números pares entre
El incremento del
1yn
índice cada vez que
se ejecuta el cuerpo
del bucle es de dos
% t3_fsumapares unidades de forma
function suma=t3_fsumapares(n) que el índice del
suma=0; bucle irá tomando y
i=2; sumando
while i<=n exclusivamente
suma=suma+i; valores pares
i=i+2;
end
end
Ejercicios
5. Codifica una función que reciba un número natural, n, y devuelva la suma de
<latexit sha1_base64="koLX46+RC8wvBaOYsMcAnRBfL8c=">AAAJ9HicvVZbbxNHFD5cWuz0QoBHXkaNK7VKauwQnBYpEiovfapANICURGh2PHYGZi/sjoMsJ/+EPlXQt/6S/oE+8hMq3vrUb87Orjd2gipVwtbczpzrd87MbJRZU7he768LFy9d/uTTK632ymeff/Hl1dVr1x8X6SRXelelNs2fRrLQ1iR61xln9dMs1zKOrH4Svbjv958c6bwwafKLm2b6IJbjxIyMkg6k9NrlFu1TQikZ9EPS6B0JmoEa0QizO9SlE4z3wTME1whNkQRlAl4/jnimQH+PUdBLrDXGHL2nRjW3QPuHYtBzaBMs77CTY7S0AUoHtA7PpmjenyPWZjF6LZb7ArSYZ0O2ZKGtwBhDu4VGQ1lNKzk6dBtNhPjyQOszbVrbFYyCguwEsgY2NaIX9AC6cpZ+jhYH7RvsiQnSO7QdPF/0MWJtHrMhrzX71aEf0LrAeZ9W8P9wFgYhC9/AF8l4CUbEQqLk9lq//ch5qrArsW3KFEGv56/ilZCM0BTHLegRW3es1TWyqVhKwZ7lWCtEvW4f2XLeDedEssUicCacs3KdMs8YGuf+VNE3I/E234FjUb+rNZWYV5rv1nH5LHst75miQiW4kB3dyEKZG80aymzIUJdN7QKzCBZSrkXHESj0yZloxPDae5eBVsb1N+ge4wrl8iSlfI687XehDvUpq/+/1j+cl6oS+rSOmlnH3bIOTTtYDxqnfjm+udyAbtEWJLbqGjIhB96nLp/osj4jUPzddaemKFA2QbldZ6fMTRy8LZG7y6h5/uOgUdB3aFtY70DWU7z0cdDe3O0He9W5OA72Fnm2g/cV1r76E87yBkdrF2rhvGqsativHOe0qgTFWVancnIeqhH6HRI1Ws0sLN4Z59WRW6qk/3avbX+01+X0SV9+WSp7R1yvhs+fDTfEiNEYs3Rlv4x1zDId6vHe/IR0anyzcIdNaf7inMU3Pyu+Mn7mCMrzmTE2Jdb+JWneiR7rYbg9OlzJw1DdCduwzBcHGRnoCd+FZ+HbpZVnq2u9bo9/YnnSD5M1Cr8Hz1b/3B+mahLrxCkri2Kv38vcwUzmziirT1b2J4XOpHohx3oP00TGujiY8afLifh6lObCHWrB6ybvTMZFMY0j8MTSHRaLe5541t7exI2+P5iZJJs4nSiwYG80scKlwn8BiaHJtXJ2iolUuYGXQh3KXCqH7yQffn8x2OXJ481uf9AdPNxcu/djAKJFN+krPNB9FPU9+gmHe5dU61Xr19bb1u/to/br9m/tNyXrxQtB5gad+rX/+BeC1OJV</latexit>

los múltiplos de 3 entre 1 y n inclusive. Por ejemplo, si n = 7, la suma buscada


es 9.

6. (Para valientes) Codifica una función que reciba un número natural, n y 3


números reales a, b, c. Se trata de calcular la media de los impares menores o
iguales que n y cuál de los tres valores: a, b ó c, tiene una diferencia en valor
absoluto con la media más pequeña. Se devolverá ese valor. Por ejemplo, si
n = 7, la suma de los impares es 1 + 3 + 5 + 7 = 16, y la media es 16/4 = 4.
Si a = 7.1, b = 5.5, c = 2.3, tenemos que: |7.1 4| = 3.1, |5.5 4| = 1.5 y
|2.3 4| = 1.7. Por tanto, el valor de los tres que está más cerca de la media es
b = 5.5 y la función devolverá este valor.

7. Codifica una función que reciba un número natural n y devuelva una variable
f lag que valga 0 si n es par y 1 si n es impar. No se podrá usar la orden mod,
ni llamar a ninguna función.
Ejemplo
La variable que se
Bucles con otras operaciones modifica dentro del
función que calcula el factorial de un bucle lo hace a
número n través de productos
en vez de sumas, con
lo que su valor inicial
ha de ser 1
% t3_ffactorial
function fact=t3_ffactorial(n) El índice recorre
fact=1; % factorial de 0 es 1 por valores decrecientes
definición
i=n; MATLAB dispone de su
while i>=2 propio comando
fact=fact*i; para calcular el
i=i-1; factorial de un
end número; la orden es
end factorial
Ejercicios
8. Codifica una función que reciba los valores x y n con n natural y devuelva
<latexit sha1_base64="Bw1T4ccs/MXNRCj86c5sucz2ALQ=">AAAIHHicvVXLTlNBGB5AW6w30KUuTgQTDdC0RQFNSIjExCUmckkokOl0So+cmzNzCE3Dq+jL6MrbzsSlz8DOld/8M4UWGuLCeJoz89/vf08ji0JtKpWfI6NjV64WiuPXStdv3Lx1e2LyzoZOcyXkukijVG01uJZRmMh1E5pIbmVK8rgRyc3Gwarlbx5KpcM0eWM6mdyJ+X4StkLBDUjp5Nh9VmcJS1mIs8kkTsMC1gW1wVqAlliZHeNehUwTUi28gnFQcsjau0WQAP0Ed8DeAZe4FU5LbZBUBH2N+xCYhS3X4tPsCG/AOgQnBAvwkz7c+jGwqkjXydpYD8lTRDadpV3SmAWWgaZOPVubuddOCNcUY0ZZKfaL8tGkE5DNAJwMkLXRpHgD1GQXp72tfugt9fJ1Ftvks3laAWvDQFZRJHzA7lnNbOzWriBftgNHfVgdmg7S52RsdWJYs53h1DvpOxOg7jlkI6JIn/lvklYUt4vxkLrketGfCSf5Hs/WJYRWGdQ1Xw3J3uKNkY2t8Kyvictlmc0PdHWZPSHcxeF6nwM2vrqDddMUo9VcYlWcZWRdZyX8Lp/VKry6aX05JN9pyGXQnfaxuv7nVD1JfWlQ/RLv/WJdIz/vJ+DHFD9HTNZyz7bNs041b0HnESKaA94E5vrdBeUY5zzOmaGcpziH6yx6HXE6CzPwMAfuY8xlOFSnBvoMwYOadernPqpuoG3jL/2DHXdzN1j187vb2+nhO+wqzFFLq30Ey/HAnrhOnXVyeJdS/8+SUO7T1GdFtlxUmvqfk+2EaqJPbbsIJHxnfk57vnse3Caov9yFxO/CbF9kF313Lt0NTf+Hz//zrA3OyDJmqYx9fAatmo1ib2KqUq7QE1wEqh6YYv5Z25v4Um+mIo9lYkTEtd6uVjKz0+XKhCKSx6V6rmXGxQHfl9sAEx5LvdOlT9xx8LCVqsC0ZUB4v2yXx1p34gZkYm7a+jzPEofxtnPTWtrphkmWG5kIiIDXyqPApIH9UgbNUElhog4ALlSIKAPR5ooLg+9pCelXzyd7EdiolasL5YXXtamVF74Q4+wee0DtWmQr7BVGaJ2JwofCp8K3wvfi++LH4ufiVyc6OuJ17rKBp/jjD1Xoox8=</latexit>

xn , para lo cual no se podrá usar el operador ˆ sino que se ha de repetir la


operación x · x · . . . · x mediante un bucle el número de veces que sea necesario.
Por ejemplo, si x = 3 y n = 4 el resultado ha de ser 81.

13. El número ⇡, se puede obtener mediante la fórmula


✓ ◆
1 1 1 1
⇡=4 1 + + · · · + ( 1)i + ···
3 5 7 2i + 1

Codifica una función que reciba un número natural n y devuelva la aproximación


de ⇡ mediante los n+1 primeros sumandos de la expresión anterior. Por ejemplo,
si n = 3, los sumandos y el resultado son:
✓ ◆
1 1 1
⇡=4 1 + = 2.8952
3 5 7
Ejercicios
14. Crea una función que dado un natural n, devuelva el error que se comete al
sustituir ⇡/4 por la serie:
Xn
i 1
( 1)
i=0
2i + 1
n
X
i 1
error = ⇡/4 ( 1)
i=0
2i + 1
Por ejemplo: si n = 4, el error es:

1 1 1 1
⇡/4 1+ + = 0.0495
3 5 7 9
La alternancia de signo se debe conseguir sin utilizar ˆ . No se podrá llamar a
ninguna función.
Bucles

Break

Relaciones de
recurrencia

Bucles con condición


sin índice

Función recursiva
Bucles y relaciones de recurrencia

Los bucles son muy adecuados


Ejemplo
para calcular valores de funciones
método de Newton para resolver la
o sucesiones definidos mediante
leyes de recurrencia
ecuación: x2i 81
xi+1 = xi
2xi

% t3_fnewton
% Entradas: a y n
En una fórmula recurrente tipo % Salida: término n-ésimo
xi+1 = f (xi, xi-1, …) el valor de una
function x=t3_fnewton(a,n)
variable depende de su valor en
los pasos anteriores, i, i-1, i-2,… x=a;
i=2;
El índice del bucle se irá while i<=n
actualizando en el cuerpo del
x=x-(x^2-81)/(2*x);
bucle, y el valor de la variable; xi+1
irá a su vez cambiando en cada i=i+1;
uno de esos pasos end
end
Ejercicios
15. Codifica una función que reciba un número natural n y devuelva el término
<latexit sha1_base64="Lbn7OaMH5XINOSRzI5RSsUB4rZo=">AAAHHnicvVXLTxNBGP9AW7G+QI9eNlITE7Bpl1AIiRElMZ4MRnkktCHb6Wy7so+yM21smv4pJvqXeNOLRr3pkSNnb578zbfLUqDgzU3mm+/9nrbR8T2ly+VfE5OXLufyV6auFq5dv3Hz1vTM7U0VdWMhN0TkR/F2w1HS90K5oT3ty+1OLJ2g4cutxt6akW/1ZKy8KHyt+x1ZD5xW6LmecDRY0czkO6pRSBF5gE2SgJosGoDbIBdYhRapRENga9BqQs/FEeSA04W2uV3GBPi/cVu0D1rijgENt5FpWzh/KAA/hjeL7TUkMW4fdBGcIu4+jsmmx5583MaDZB1Nh9APOOMos3kIrgIvYF6T4/tspeBDgFZpfitUYKsivaVdVOrRHKoc0iPUrJB7jAgDslnqgT8P7RqOB+hxDTVEMXm3UVkDui9GtIxVBb4W0LVFWuI4BXoFyyRTIymy9nEG9jnRk6xseKrCkw16NMoAnsbb2ZndAmwqWRbr0DL9TOYh0ClTTY97H/G0VNa7o0kEdMDcFs8o2REFzxZ9pCfprA9PeLGoAzyZvczi9HjmLYbnTcbodtMo0UgOGnKZxrbYspjOwoWsD+ox6BoqLPxzm5f++zbPj/TacGrchX3eA9OrpGdteO4gok77odjuoncwbu9Pv42L3sGR9BnXFHH2gitcAbeQ7afZ2WTfQkQzOzk3Qtsjuz+6/2ZXayxJNtJwjrYwqVjSG5wAVZu9mecMj19JNe2ckakzlal/1qayjievJoE2wwWGiwyXs98bf+z0k+5H3Hsz5wP2aaxKu9Oz5VKZP+ssUkmRWUq/9d3pL7VmJLqBDLXwHaV2KuWOrg+cWHvCl8NCratkxxF7TkvuAA2dQKr6gH/kh9Z9N4ot3ZYW06O6AydQqh80oBM4uq1OywxznGynq93l+sALO10tQwEVyNyub+nIMv8VVtOLpdB+H4gjYg9ZWqLtxI7Q+EcpoPzK6WLPIpt2qVItVV/as6tP00ZM0V26Rw/4Ma7ScyzEBonch9zn3Pfcj/z7/Kf81/y3RHVyIrW5Qye+/M+/U/Vy1g==</latexit>

n-ésimo de la sucesión:
p
xi+1 = 2xi , i 2 N, x1 = 3.57

Si n = 3, p p
x2 = 2x1 = 2.6721, x3 = 2x2 = 2.3117
Prueba con valores de n más grandes. ¿A qué valor parece converger la sucesión
cuando n tiende a 1?

17. Codifica una función que reciba un número natural n, con n 3 por
hipótesis, y devuelva el n-ésimo término de la sucesión de Fibonacci:

xn = xn 1 + xn 2, x1 = 1, x2 = 1

Por ejemplo, si n = 6, los términos de la sucesión son 1, 1, 2, 3, 5, 8 y la función


devolverá 8.
Ejercicios
19. Codifica una función que reciba un número natural n, con n 4 por
hipótesis, tres valores x1 , x2 y x3 y devuelva el n-ésimo término de la siguiente
sucesión:
xn = xn 1 + xn 2 + xn 3
Por ejemplo, si x1 = 4, x2 = 1, x3 = 3 y n = 4; dará x4 = x3 + x2 + x1 = 6.
Si n = 5, x5 = x4 + x3 + x2 = 10.
Bucles y condicionales

Ejemplo
Se combina bucle con función para contar los divisores de un
condicional cuando se número natural n
necesita distinguir, de entre un
conjunto de potenciales % t3_fcuentadiv
candidatos, los que cumplan
una cierta condición. function cont= t3_fcuentadiv(n)
cont=0;
i=1;
while i<=n
if mod(n,i)==0
Implica que dentro del bucle cont=cont+1;
end mod devuelve el resto
while-end o for-end nos
de la división entera entre dos
encontremos con un i=i+1;
números:
condicional if-end end
end >> mod(14,6)
ans=2
>> mod(14,7)
ans=0
Ejercicios
29. Codifica una función que reciba dos números naturales m y n, y devuelva
<latexit sha1_base64="hG0L+kEFQWJMaHp4mgk62eS6YTE=">AAAEkniczVNNbxMxEJ00C5TwlfJx4mKRIHFAUZJKoYCQCgGJA4cikaZSElVex9uYej+wvRFR1H/IH+DID+DErSeeN1tU2gouHPDKnpk3z+PxWznMtLKu3f5aWasGly5fWb9au3b9xs1b9Y3buzbNjZADkerU7IXcSq0SOXDKabmXGcnjUMtheNj3+eFcGqvS5INbZHIS84NERUpwByjdqAxpTAmlpLBOSWJ1xGgJNKQIXpeeUouO4PXBmoIXYQriQHKwvY0KTwD/AcvoE2IJa7B6NCxYU+y3sAkdU4yM+RVznJkj5qSBe6wJRhN2UfgJ5uMy8j3Oi/oa1te1iBj43+gzzopRleHUFN5x0Y3veY5pgZmytgDaxL0Y7ZSopI+YMWWomxanWexZsV9QBzqc7scjW2VXJ/UYUEa9ou4YXw3fn7XdpPZ/oe3flP0O1kXKeqtRX5WqnWgR/2NtPWtzpex+vdFutYvBzjud0mlQOXb261/G01TksUyc0NzaUaeducmSG6eElke1cW5lxsUhP5AjuAmPpZ0si4d1xB5GqWFuJlkRn+YueWztIg7Bibmb2bM5D16UG+Uu2posVZLlTiYCFOSiXDOXMv8+2VQZKZxewOHCKHTJxIwbLhxecQ3X75y97Hlnt9vq9Fq9993G9qtSiHW6Tw/oEaR9Qtv0Fr9mQKJ6r/q8+rr6JrgbPAteBv0Vda1S7rlDv43g3U+r3/1w</latexit>

su máximo común divisor mcd. Por ejemplo, si m = 12 y n = 18, mcd = 6.

30. Codifica una función que reciba dos números naturales m y n y devuelva
su mı́nimo común múltiplo mcm. Por ejemplo, si m = 12 y n = 18, mcm = 36.
Ejercicios
31. Codifica una función que reciba 3 naturales m, n y p y devuelva una vari-
<latexit sha1_base64="NwK5pbH8W+tV0gWcYhrR0Y0/FpQ=">AAAHEnicrVVNbxMxEHULCSV8tXDksqJF4hCipJFaEEKq6IVjkeiH1ESV13GabXfXy9obNYr6L0D8Fzgh4NY/wLFHDpy4ceJ51kk2aRESYqO1xzPjN2/G46yfhIE29fq3ufkrV0vlawvXKzdu3rp9Z3Hp7o5WWSrktlChSvd8rmUYxHLbBCaUe0kqeeSHctc/3rT23b5MdaDi12aQyHbED+OgGwhuoFJL8+9Zi8VMsQBjh0mMhnlsCK3PupCarMFq7BTSJrw68OviFYxDk8Hbzl2SBPQ/MXvsDdYSc4rRan3yauK1/gbWFHMIq4ZuhUWsSrYVjAO8VpeMV5ZVnxBDzMW4dpUCnyNCSBFXwCXE+pB2G4oy4TOxPkdW1kNjt0fIHlj8AG6AWbmoHvSKOEbsnJ04m10LzBHxyHOwdenj1dCnTpfXMiWcjtuXo36HbJwmZr+AJOE3QU4dRgI5dns4sbFjQllLdkSrYvWezeS4WsjxX3En51BEbk5VLz/FeOxfQ/e0WAW/v/VW8z/1Vka2Yi1ney1n+Oee0ljNnuPovPqEkGuKnVCl7E/AI8TuAWXYodh5xISYJPBW4/g1SFsOy9ZaAikh9Oq4otbTnt46pOo/chudy1MXkVMd8l6fRJO0S9HJWI/zcS19zMLdqlHNOXUQh32kkeRr+T52N2rgOA0omj2dI9qR16UHWVMsbwpDkDy5LzmHyzPO61ilHlBUvaBQ+fwuF9nnHGUh28jFUlPdoKgXprH0TI1rB4vL9VqdHu+i0HDCMnPP1sHiWaujRBbJ2IiQa73fqCemPeSpCUQoTyutTMuEi2N+KPchxjySuj2kP/ZT72FXpZ7pSY/WRd8hj7QeRD58Im56etZmlZfZ9jPTfdIeBnGSGRkLuMDWzULPKM9+H7xOkEphwgEELtIALD3R4ykXBl+RCtJvzCZ7UdhZrTXWamuvVpc3XrhCLLD77AF7hCZZZxvsJRpym4nSu9LH0pfS1/Lb8ofyp/Ln3HV+zu25x6ae8tlvuoB1AA==</latexit>

able f lag tal que f lag = 1 si el mı́nimo de los máximos comunes divisores entre
dos de éstos números corresponde a la pareja m, n; f lag = 2 si corresponde a la
pareja m, p y f lag = 3 si es n, p.

33. Codifica una función que reciba un número natural n y devuelva su divisor
de valor máximo, excluyendo al propio n. Por ejemplo, si n = 27, su divisor
de valor máximo es 9. Para ello, se montará un bucle que arranque en n 1 y
vaya bajando hasta que encuentre un divisor de n, rompiendo el bucle en ese
momento y devolviendo ese valor.
Ejercicios
42. Codifica una función que reciba dos naturales estrictamente positivos, m y
<latexit sha1_base64="Rzp90fj3PAQqZenAElIx5snYNns=">AAAJ8HictVbLjhw1FHVCCN3DawJLWFhMkIKYtLp7khmQGCkiQmKDNIhMEmlmFLld7m4zrgdl10it1vwHrBCw4wf4CX6AZT6ABWLHinNvubqr57mBblXZvr6+j3OP7RoVzvrQ7/9x4+Yrt169/Vqnu/b6G2++9fb6nXee+rwqtdnXucvL5yPljbOZ2Q82OPO8KI1KR848Gx0/pvlnJ6b0Ns+ehFlhjlI1yezYahUgyu/cui0ORSZyYfFOhME7CCnmkI7EGL0HYih64hS9x9BKoDfGo4WCpII2tWPuacj/RivFdxgbtCXeJB2xVoL1Hi2tCdAo0TpokIzeARKyHCBPYyRkpeB1FiMrTri/CakUd6F1F+2M+xkekmtoZHH2M5bWFkq0U1goEGNgfzZamnFsBrYpaoeWonX89pClMXrD0iaHfzjGMo4Ljj2Nozr2kldcHCVlOIralrFz8OQ5QwO8pdiLMRvxLZ4UHsi3ZJ3a6q4YiJ0V27uo1U704K6NrB2Dj6iRxU1uP412h2Ir4lphvIpJXbuH0O2BL4diDf/r2LT9H7Gp4rl2HTYjClUL8fN1bbzQiJBRsOdipcZc9QmvbrxOW9U/iYwtGaFlLZY+PesljAwxMWXuZSw1HHHBsSZYQUzPF7aTC+tFOfQXnjLWr1FXeP95BVM22ZbiXbYa4y6e7dhuid9Q4QannFGi/F7GDGdXWtnBk18gH1xqs99iyvVc2YlckeIesmyi+HhRCbs4Jbz46H/hVLNnL2MT9STvhlmswrJ+Mp5itTznnT7BasVrmgga+4E9poyGYjY0jNni2dVVtd+2LxWRIEntsW1xyb+mqmctushzQs8wLjVe6spTw/D88BoeLvfJLk6Lh4sTSsUKeOhW8Q5Q0W7NlwfInmx/0+L/lNGmEWU24arVfi5jnATXvmDrZhFfydlpRqu5f16K+jSmeCyzrV0Htzjz6PYqWJqwjPyfcE2WZ8VXzNdj9L5kOwmfA4hSvi+eIAfS0XwLUgRV6yawrd2Q804IUZ9sTKLeUpoxr6YY3+c7klj3Qdz/FZ9u9W5IFrVs+KPEX5zfECj1CekX6xv9Xp9/8nxnEDsbIv72Xqz/fpjkukpNFrRT3h8M+kU4mqsyWO3M6dph5U2h9LGamAN0M5UafzTnz5ZT+eE4L2WYGsnjtu5cpd7P0hF0UhWm/uwcCS+aO6jC+JOjuc2KKphMQwVz48rJkEv6+pGJLY0OboaO0qVFlFJPVal0wDfSGtIfnE32fOfpsDfY7m1/Pdx49HkEoiPeA+T3+Pp8hILviX2hO77zQ+fnzi/dsvt998fuT7XqzRtxzbti5df99V+nHOyT</latexit>

n, con m < n por hipótesis, y devuelva la suma de los números primos entre m
y n, ambos inclusive. Por ejemplo si m = 17 y n = 27, los primos entre ambos
son 17, 19 y 23, cuya suma es 59.

46. Codifica una función que reciba un número, num y devuelva una variable
f lag que ha de valer 1 si num se descompone en producto de dos primos y 0
si no es ası́. Por ejemplo, para num = 6 = 3·2 devolverá 1 y para num = 7 o
num = 12 devolverá 0.

47. (Para + valientes) Codifica una función que reciba un número n y devuelva
el mayor primo menor o igual que n terminado en 3 tal que el primo anterior
termine en 1 y tal que la diferencia entre ambos sea 2. Por ejemplo, si n = 55, la
respuesta será 43. Si no hay ninguno, devolverá 0. Este ejercicio está inspirado
en la estupenda novela de Mark Haddon, “The curious incident of the dog in
the night-time”, publicada en el año 2003.
Bucles

Break

Relaciones de
recurrencia

Bucles con condición


sin índice

Función recursiva
Ejemplo de bucle en el que la condición no se re ere a un índice

La ventaja en los bucles while es que


Ejemplo el índice del bucle es una variable
mas del programa
función que cuenta los dígitos de un
número natural
La condición no tiene por qué estar
relacionada con el valor del índice
del bucle sino que puede referirse a
% t3_fdigitos valores tomados por otras variables,
function cont=t3_fdigitos(n) funciones o combinaciones de
ambas
cont=0;
while n>=1
n=n/10;
Dividiremos el
cont=cont+1; número n por 10 mientras el
end resultado sea mayor o igual que 1
end El número de divisiones realizadas nos
permite saber cuantos dígitos tiene
el número
fi
Ejemplo No se sabe cuántos términos
de la sucesión van a cumplir
función que cuenta los elementos de la esa propiedad, por lo que no
sucesión de Fibonacci menores que cierto se puede crear un bucle con
número r un índice

% t3_ffibonacci
% Entradas: x1,x2 >0 y x1<r, x2<r
% Salida: nº de términos menores El problema se resuelve
que r implementando esa
function cont=t3_ffibonacci(x1,x2,r) condición directamente en el
x3=x1+x2; while del bucle
cont=2;
while x3<r
cont=cont+1;
x1=x2; El bucle estará ejecutándose
x2=x3; mientras que los elementos
x3=x1+x2; de la sucesión sean menores
end que r
end
Ejercicios
49. Escribe una función que reciba un número natural n, con n 2 por
<latexit sha1_base64="E77d4cjgtuOotnsWTg59cDaxs8k=">AAAJvnictVZLbxs3EGaSPiT15TTHXojaBVrUVbVSlCYFArgNUvToAnUSwDIMiuJKbPZlkitEEPwP8wfyE3LoKbee+nFISSslTR0UXWHJ2eHMcL7hN7saV5m2rtd7ce36jffe/+DDVrvz0ceffPrZ3s3PH9myNlKdyDIrzZOxsCrThTpx2mXqSWWUyMeZejx++sCvP54rY3VZ/O4WlTrLxbTQqZbCQVXevPEnG7GClUxjnDCF0THOltCOWQrpNrvHuuwS0kNmmWQGlmPYcVbDVmBOSZLQv8LM2QWe/brBKMlaRGuO+y+WQ2+wIyd/hxWDOcPzATQH7BCSxHoRNSM2hccF6+OJsworBvMMkSvs6LBmIVvyW5CvjyYRN6M8Mtrf7zqBnZcFoXDQvcSoyYMTem9dIhaH7L3zWJGgmzTiWcSXce+AO6z+QohLwiYJP2dfN/A8Y+csYfdxH8R8g64fdd80KmijV8iipIr6PF7h1qhKTUiDbuUTatiFdBwrpdgfhKQibIcUV0dLv+cw1vz/QL6b+SpLv+sGX0L7h7FP44DGIY13Y50SaIPkM9g+UR/9R8I0wO979gOQee52ISWYB1STEX4d/N7O+CE8AuOPiSk+/pwqraO1382f0wNE8Rmkaw69W0+4dV2afWEjHkcslZjF+jRU7ABL/NXIK9gfQHtI+2xYZeK5LuIJzSmHjLBsMp3HbhDIKYsMSumkpxRrlfms0SPzyDtDp7Lhk4kd6lccZayIKZx83509/oQ0yQJWotH9Hu8G6QZ1j2pXxLeApbdM6D1HJ+mRltQdD9e89vENsWfVi74v/LyE9B0QXrJvG899PO++pVZdHbLa7esLYl/nCh1ZwboHW98Fo3iiQTPcOtn7xNH+unNF5JZFhDqyZ9UXq87K1/w1VJvme0ZvxR3+a9wmG2xkQo/qetUeG8Qe+689dJXvyps7QNHatmdAJBud2OT/Ys2ul/B9+zs22A1QldsN7zpyM8TftvsnK97YN4lvzoL0K/uC6jwFkqZf93xvv9ft0cVfF5Io7LN4HZ/vPR9NSlnnqnAyE9aeJr3KnS2FcVpm6rIzqq2qhHwqpuoUYiFyZc+W9Cfkkn+Vloa7meL03LRditzaRT6GTS7czO6ueeWb1k5rl949W+qiqp0qJEywltYZdyX3/2X4RBslXbaAIKTRyJLLmTBCOvzj6QB+sgv2deFRv5vc6d75rb9/9HMsRIt9wb7ERzvBx+OI/YpDPmGy9VNr2qpaF+2jdtrO22UwvX4t+txiW1f72d85rttt</latexit>

hipótesis, y calcule la media aritmética de los elementos de la sucesión de Fi-


bonacci (con x1 = 1 y x2 = 1) que son menores ó iguales que n. Por ejemplo,
si n = 15, los elementos de la sucesión de Fibonacci menores que 15 son 1, 1, 2,
3, 5, 8 y 13 y su media es: 33/7 = 4.7143.

51. Para valientes) Codifica una función que reciba tres números estrictamente
positivos p, q y r, y devuelva una variable f lag que ha de valer 1 si r pertenece
a la sucesión de Fibonacci iniciada por p y q y 0 en caso contrario. Es decir:
xn = xn 1 + xn 2 , con x1 = p y x2 = q. Por ejemplo, si p = 0.2, q = 0.5 y
r = 1.2, la respuesta es 1, mientras que si r = 1.5, la respuesta ha de ser 0.

53. Codifica una función que reciba un número natural y devuelva el número
de ceros que hay en él. Por ejemplo, en 304 hay un cero, en 30 hay un cero y
en 115 no hay ningún cero.
Ejercicios
<latexit sha1_base64="urqcADrya6TTWO8eYSSjIDCDMN4=">AAAEKnicjVNLbxMxEJ5keZTwSuHIxSJFAglFu4XyOFSq6IUDhyCRtlISVV7HSZZ6H9jeSFGUfwT/hBOcKuCAxJUTN058692m0OaAI9ufv/lmPDMbh5mKjPX941rdu3Dx0uW1K42r167fuNlcv7Vn0lwL2RWpSvVByI1UUSK7NrJKHmRa8jhUcj882i3s+1OpTZQmb+wsk4OYj5NoFAluQaXrtRbNqU8hjYjRFn5tWgDdpw5x0piMplgVRSQpIYvV0AOwu5TibMBoymHV4HIwhcfIIQH2F3ZG73CW2DXWgg2daogIBvtJXF2dNyjGZDRzOMF8CCTcfafW0ku7uH6lfo7JYQ+rSJHLQuF2AzyFtg321coch7BO4aecTtN3d4fCmtBvxCzzK3XMaYTrxWl1nDLXs9KyOlNVZTaknzTG3XZ5lstqixw74LXzfYsZI3LhWfShqKRUbtMjVP646s+sunEb3MYyd+1yzIEtchu6CsyyvsB5ZsvaTmIXUZ5Wcf8njk/tw2bLb/tusPMgqECLqtE5bH7sD1ORxzKxQnFjeoGf2cGcaxsJJReNfm5kxsURH8seYMJjaQZz94dfsHujVDM7kcyd/9bOeWzMLA6hibmdmLO2glxl6+V29Gwwj5IstzIRkMA2yhWzKSveDRtGWgqrZgBc6AhZMjHhmguL19VA+cHZYs+Dvc128KS99XqztfOiasQa3aG7eG4BGr5DL/HhuyTqH+qf61/r37z33ifv2PtSSuu1yuc2/TO8H38AJvfw4A==</latexit>

55. (Para valientes) Construir una función que reciba dos enteros m y n,
con m entre 0 y 9 ambos inclusive. La función devolverá el número de veces que
aparece m entre los dı́gitos de n. Por ejemplo, si n = 304, y m = 0 el resultado
será 1, pero si m = 7, el resultado será 0.

56. Hay números de 5 dı́gitos del tipo abbbb tales que cuando los elevas al
<latexit sha1_base64="dWKAT9Zba/PJF6jgK1xPWCrMAGU=">AAAFcnicbVRLT9tAEB4gaWn6gvZWLm4JEpUgcijPSpVQufRIpfKQSIrW601wWT+wN5GiiN/XS/9Af0RPtJee+u14k4aALWdm55v3TDbIdFQY3/85MztXqT54OP+o9vjJ02fPFxZfHBdpL5fqSKY6zU8DUSgdJerIREar0yxXIg60OgkuDyx+0ld5EaXJFzPIVDsW3STqRFIYiNLFme80pBYF1CGPtmibGnQN7hMJGoAm9JdiUpRTSgXOIXirZ7lf1KWIzASiQQ1kGWQe1eEjcG+dEQENxdpX1GNPElQgSsgW2vlSrNcHYk+C/ZaaITIRTnvAFqW/Amjs9C2Ws9w4SXMcMYTEA5dM1fY/I5u/AqbYzr+nUkvDcdUROqc4XgJEufwtn7OPAtYN0ENY5Ix9wxejR7ba91RDb+q0Srvoavm+pa+0QeuI/oF26B3oHuayBQ0f8k34aE18q0B33DtpucfT9GG/ifMO5LscqUYHnL/NO0JXR/2wtMOchPyGOzTqia3ESgPWCsdTKise7Yadd93NxZ7s1Nd4cil7qyObFk/siqdqsWAs2XPaA2dhO5Rz/DJqgfie27Hbk5veMzWxqZYfTdVu5ZpD+uA1fstZl/s06oLduxyI9arZuo7OaJy77H/UlT5vZpdt7Ibd4POd/8z5nfRfZjSy1iyz2Qm3swl+G+cLy37D58e7yzQds0zuOTxf+NEKU9mLVWKkFkVx1vQz0x6K3ERSq+taq1eoTMhL0VVnYBMRq6I95Ivj2lvppLlnLpTH50ndoYiLYhAH0ImFuSimMSu8Dzvrmc5uexglWc+oREIFWKenPZN69v7xwihX0ugBGCHzCFl68kLkQhrcUjWU35wu9i5zvNFobje2Pm8s7390jZinJXqDP4Nd9X1cX4d0RHLuT2WpUq+sVH5XX1VfV13XZmeczUu69VTX/gFsbCFe</latexit>

cuadrado y les sumas o restas 1 queda un número que tiene 10 dı́gitos todos
diferentes entre sı́. Por ejemplo:

(85555)2 1 = 7319658024 (97777)2 1 = 9560341728

Codifica una función que reciba dos enteros a y b, con 0  a, b  9, y comprueba


si el número abbbb es de ese tipo, devolviendo una variable f lag que valga 1 ó 0
dependiendo de que lo sea o no.
Ejercicios
59. Codifica una función que reciba 3 valores reales positivos A, a y prec,
<latexit sha1_base64="Db3xVbY/o1XAxLRIJ31H7ABOrhE=">AAAGNHicpVRLbxMxEJ6WBEp5tXDkYtEgVaKNkqAGkKjU0gsHDkWiD6kpleM4iem+uuutCKF/C/4EfwAJTggQB7jwB/g83pT0cYJd2R7PjMffNzO77SQwma3VPk5MXiiVL16aujx95eq16zdmZm9uZnGeKr2h4iBOt9sy04GJ9IY1NtDbSapl2A70Vnt/zdm3DnWamTh6YQeJ3g1lLzJdo6SFKp6dnKcWRRSTwdwhjdmSoCG0bepCWqJHVKUjSGvw6sCvi6FIQpPD261dlhT0v7EKOsBeY00xO22bve5jHEIKEMdZssLDafwugSWDv8U4ZFlQhVZpAauEJGjAmqSIXGFLjPiWkff4Hks/YA+ZkY/RYTQBWzNgU3yfRzuNKBV6TXvgbOge1cF1mfeGFpGFDtilOKlg99qX1IBlFX5DSF53xEhaGG5fRwR5rDGYe7jxAHp31zSzcJgOOU8BZ0WwJJibAXqNVRTIDHNP4JWyp2cyynIF8V0Gu2D+tvAXQDjitMicWhy3R332ejyWwyrjbAHXOlfGIXmFEcLH1WqBs2aKWiyDcwNd4WuyjNg1vGdrswxtFX6+Rpr7YlQBhyPH7LtNc80kqjiyO03I7DJYHGd/2lfzdA91iiycl6kKNA7jAueog1MWZzymAf3tDB9ZcVQf1/VixP0+Qpn9Y659hp8xnvHqSuai6c1/13KUaXH8HZ3k3ywYS1h/jt0WnPv19lnrM+O7NOYeHe/IJmd1Cfe66tfxj3AsuYv2ZuZq1Ro/4qxQL4Q5Kp71vZkPrU6s8lBHVgUyy3bqtcTuDmVqjQr00XQrz3Qi1b7s6R2IkQx1tjvkX9+RuNuNU2H7WvB+3HcowywbhG34hNL2s9M2pzzPtpPb7sPdoYmS3OpIwQW2bh4IGwv3BxUdk2plgwEEqVIDlEL1ZSqVxX/W0a+fJntW2GxU681q83ljbuVJkYgpuk13aB7JfEAr9BQf4wap0vvS59K30vfyu/Kn8pfyV+86OVGcuUUnnvKvP1SYSJ0=</latexit>

obtenga términos de la sucesión

x2i A
xi+1 = xi , x1 = a, i 1
2xi
y devuelva el primer xi para la que |xi xi 1 | < prec.
Por ejemplo, si A = 225, a = 100 y prec = 0.5, en la siguiente tabla se mues-
tran los valores de xi para i = 1, . . ., y de los correspondientes |xi xi 1 |. La
primera vez que |xi xi 1 | < 0.5 es para i = 6, ası́ que la función ha de devolver
x6 = 15.0019. <latexit sha1_base64="BSaJ2wwXPrlIKDMs9gii2x9EyYY=">AAADAHicbVLLbtNAFB2bVzGPprCExYgEi00tj13b8a6CDcsikbZSHEWTySQZ1S/NjKtGTjbwM7BCwI5v4Af4G64TE0HL3cy555w7uvfOTMpUKO26vwzz1u07d+/t3bcePHz0eL9z8ORUFZVkfMCKtJDnE6p4KnI+0EKn/LyUnGaTlJ9NLt40+tkll0oU+Xu9LPkoo/NczASjGqjxgfE8mfC5yGtNoWRttRnjueZyl4JYpVSua7liK7a2hN27Goue3UtSPtMrwPjwalyLQ7JOpJgv9KqXJFayaLqyCLYxcV0bA+UBDohDvADyo77TjwIXaB9oL3Ki0Afa8x0/9Br6qKmMnNj3IxvHTt+LfWADbJPA8fw4Bq8Txn4EZNhYA8d1CbAuqH3SdHA5LbQCaQv+nI3C8+lurG22m7mVYB3jTteFO5vANwFpQRe1cTLu/EymBasyuIqlVKkhcUs9qqnUgm3WWyleUnZB53wIMKcZV6N684xr/HJWSKwXHG/yv701zZRaZhPwZFQv1HWtIf+nDSs9649qkZeV5jkDC2izKsW6wM1vwFMhOdPpEgBlUkCXmC2opAw2oSwYn1wf9iY49RwSOuE7r3v8ul3EHnqGXqBXiKAIHaO36AQNEDM+Gp+Nb8Z384P5yfxift1aTaOteYr+CfPHbx23324=</latexit>

i xi |xi xi 1 |
1 100
2 51.1250 48.8750
3 27.7630 23.3620
4 17.9337 9.8293
5 15.2399 2.6937
6 15.0019 0.2381
.. .. ..
. . .
Ejercicios
64. (Para valientes) El algoritmo de Euclides permite hallar el máximo común
divisor de dos números naturales m y n dividiendo primero el mayor de los
dos entre el otro y después recursivamente el divisor entre el resto. El último
resto que no es cero es el máximo común divisor. (Si la primera división ya
tuviera resto 0, entonces es que el máximo común divisor es el menor de los dos
números). Por ejemplo, si m = 21 y n = 15 el máximo común divisor calculado
mediante el algoritmo de Euclides es el siguiente:

21 = 1 · 15 + 6
15 = 2·6+3
6 = 2·3+0

El máximo común divisor de 21 y 15 es 3, el último resto no nulo. Escribe una


función que dados dos naturales, calcule el máximo común divisor mediante el
algoritmo de Euclides.
Bucles

Break

Relaciones de
recurrencia

Bucles con condición


sin índice

Función recursiva
Función recursiva en MATLAB

Es una técnica de programación


en la que una función se llama a sí
Ejemplo
misma durante su ejecución
Factorial de un número natural
% t3_rfactorial

La recursividad y la iteración function fact=t3_rfactorial(n)


(ejecución en bucle) están muy if n==1
relacionadas, cualquier acción
que pueda realizarse con la fact=1;
recursividad puede realizarse con
iteración y viceversa else
fact=t3_rfactorial(n-1)*n;

La recursividad se debe usar end


cuando sea realmente necesaria,
es decir, cuando no exista una end
solución iterativa simple La función se llamará a sí misma hasta
que la entrada sea menor o igual a uno que
se devolverá el resultado
Ejemplo Para aplicar la
Función que reciba los valores x y n con n recursividad se necesita
que exista un caso
natural y devuelva xn de manera recursiva:
base, en la que la
xn = x· xn-1 resolución del problema
sea inmediata y no
% t3_potencia requiera invocar de
function pot=t3_potencia(x,n) nuevo el proceso
if n==0
pot=1; En este caso, el caso
else base sería que toda
pot=t3_potencia(x,n-1)*x; valor x elevado al
exponente 0 es
end
equivalente a 1
end
Ejemplo
Función recursiva que devuelve el término n-ésimo de la sucesión de
Fibonacci con x1=1, x2=1

% t3_potencia
function xn=t3_fibo2(n)
if n==2 || n==1
xn=1;
else
xn=t3_fibo2(n-1)+t3_fibo2(n-2);
end
end
Funciones auxiliares en el mismo archivo
% Entrada: un número natural % Entrada: un número natural
% Salida: número de ceros que % Salida: número de ceros que
contiene contiene
function nceros=t3_f53(n) function nceros=t3_f53conaux(n)
nceros=0; nceros=0;
dig=t3_fdigitos(n); dig=t3_fdigitos2(n);
i=1; i=1;
p=n; p=n;
while i<=dig while i<=dig
if mod(p,10)==0 if mod(p,10)==0
nceros=nceros+1; nceros=nceros+1;
end end
p=floor(p/10); p=floor(p/10);
i=i+1; i=i+1;
end end
end end

%t3_fdigitos %t3_fdigitos2 función auxiliar


function cont=t3_fdigitos(n) function cont=t3_fdigitos2(n)
cont=0; cont=0;
while n>=1 while n>=1
n=n/10; n=n/10;
cont=cont+1; cont=cont+1;
end end
end end

Para introducir en un mismo archivo (Moodle) la función principal y la función


auxiliar, deben escribirse a continuación una de otra y respetar la sintaxis
function-end de ambas

También podría gustarte