Después del artículo introductorio a la programación recursiva, es el momento de ver algunos ejemplos prácticos.
A continuación podrás ver los ejemplos más comunes que se utilizan durante la formación en programación, codificados en JavaScript, Python y PHP.
Antes de pasar a los códigos, te dejamos una curiosidad sobre PHP:
El nombre “PHP” es un acrónimo recursivo, lo que es una curiosidad interesante dentro del mundo de la informática. Originalmente, PHP significaba “Personal Home Page”, ya que fue creado en 1994 por Rasmus Lerdorf como un conjunto de herramientas simples para rastrear las visitas a su página web personal. Con el tiempo, el lenguaje evolucionó y adquirió muchas más características, convirtiéndose en un lenguaje de programación completo.
A medida que PHP creció en complejidad y funcionalidad, su nombre se cambió a “PHP: Hypertext Preprocessor”. Aquí es donde se encuentra la recursividad: el acrónimo “PHP” incluye la misma “P” de “PHP”, lo que crea un bucle lógico. En otras palabras, el significado del acrónimo PHP contiene el propio nombre “PHP”, lo que da lugar a la recursividad en su nombre.
Un acrónimo recursivo es aquel en el que una de las letras del acrónimo hace referencia al propio acrónimo. Este tipo de acrónimos es una especie de “broma interna” que refleja el sentido del humor y el ingenio de los programadores.
1. Factorial de un número
El factorial de un número entero positivo n es el producto de todos los enteros positivos desde 1 hasta n. Se denota como n!
Python
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)
JavaScript
function factorial(n) {
if (n === 0 || n === 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
PHP
function factorial($n) {
if ($n == 0 || $n == 1) {
return 1;
} else {
return $n * factorial($n - 1);
}
}
2. Secuencia de Fibonacci
La secuencia de Fibonacci es una sucesión de números enteros en la que cada número es la suma de los dos anteriores. Comienza típicamente con los números 0 y 1, y a partir de ahí, cada término sucesivo se calcula como la suma de los dos números anteriores en la secuencia.
Python
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
JavaScript
function fibonacci(n) {
if (n === 0) {
return 0;
} else if (n === 1) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
PHP
function fibonacci($n) {
if ($n == 0) {
return 0;
} elseif ($n == 1) {
return 1;
} else {
return fibonacci($n - 1) + fibonacci($n - 2);
}
}
3. Búsqueda binaria
Python
def binary_search(arr, target, low, high):
if low > high:
return -1
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] > target:
return binary_search(arr, target, low, mid - 1)
else:
return binary_search(arr, target, mid + 1, high)
JavaScript
function binarySearch(arr, target, low, high) {
if (low > high) {
return -1;
}
let mid = Math.floor((low + high) / 2);
if (arr[mid] === target) {
return mid;
} else if (arr[mid] > target) {
return binarySearch(arr, target, low, mid - 1);
} else {
return binarySearch(arr, target, mid + 1, high);
}
}
PHP
function binarySearch($arr, $target, $low, $high) {
if ($low > $high) {
return -1;
}
$mid = floor(($low + $high) / 2);
if ($arr[$mid] == $target) {
return $mid;
} elseif ($arr[$mid] > $target) {
return binarySearch($arr, $target, $low, $mid - 1);
} else {
return binarySearch($arr, $target, $mid + 1, $high);
}
}
4. Torres de Hanoi
Las Torres de Hanói es un problema clásico de recursividad que consiste en mover n discos de diferentes tamaños desde un poste inicial a otro, usando un tercer poste auxiliar y siguiendo reglas específicas. La solución se basa en dividir el problema en subproblemas más pequeños, moviendo primero los n-1 discos, luego el disco más grande, y finalmente los n-1 discos restantes, aplicando recursividad en cada paso.
Python
def hanoi(n, source, target, auxiliary):
if n == 1:
print(f"Mueve disco 1 de {source} a {target}")
return
hanoi(n - 1, source, auxiliary, target)
print(f"Mueve disco {n} de {source} a {target}")
hanoi(n - 1, auxiliary, target, source)
JavaScript
function hanoi(n, source, target, auxiliary) {
if (n === 1) {
console.log(`Mueve disco 1 de ${source} a ${target}`);
return;
}
hanoi(n - 1, source, auxiliary, target);
console.log(`Mueve disco ${n} de ${source} a ${target}`);
hanoi(n - 1, auxiliary, target, source);
}
PHP
function hanoi($n, $source, $target, $auxiliary) {
if ($n == 1) {
echo "Mueve disco 1 de $source a $target\n";
return;
}
hanoi($n - 1, $source, $auxiliary, $target);
echo "Mueve disco $n de $source a $target\n";
hanoi($n - 1, $auxiliary, $target, $source);
}
5. Imprimir una lista al revés
Python
def print_reverse(arr):
if len(arr) == 0:
return
print(arr[-1])
print_reverse(arr[:-1])
JavaScript
function printReverse(arr) {
if (arr.length === 0) {
return;
}
console.log(arr[arr.length - 1]);
printReverse(arr.slice(0, -1));
}
PHP
function printReverse($arr) {
if (count($arr) == 0) {
return;
}
echo array_pop($arr) . "\n";
printReverse($arr);
}
6. Sumar los elementos de una lista
Python
def sum_list(arr):
if len(arr) == 0:
return 0
else:
return arr[0] + sum_list(arr[1:])
JavaScript
function sumList(arr) {
if (arr.length === 0) {
return 0;
} else {
return arr[0] + sumList(arr.slice(1));
}
}
PHP
function sumList($arr) {
if (count($arr) == 0) {
return 0;
} else {
return array_shift($arr) + sumList($arr);
}
}
7. Permutaciones de una cadena
Python
def permute(s, answer=''):
if len(s) == 0:
print(answer)
return
for i in range(len(s)):
ch = s[i]
left = s[:i]
right = s[i + 1:]
permute(left + right, answer + ch)
JavaScript
function permute(s, answer = '') {
if (s.length === 0) {
console.log(answer);
return;
}
for (let i = 0; i < s.length; i++) {
let ch = s[i];
let left = s.slice(0, i);
let right = s.slice(i + 1);
permute(left + right, answer + ch);
}
}
PHP
function permute($s, $answer = '') {
if (strlen($s) == 0) {
echo $answer . "\n";
return;
}
for ($i = 0; $i < strlen($s); $i++) {
$ch = $s[$i];
$left = substr($s, 0, $i);
$right = substr($s, $i + 1);
permute($left . $right, $answer . $ch);
}
}
Esperamos que te haya gustado y que no te olvides de seguirnos en LinkedIN que es dónde anunciamos cada artículo nuevo, y en el resto de redes sociales donde comenzaremos a subir contenidos sobre ciencia pero diferentes.
https://www.linkedin.com/company/the-science-driven-company/
https://www.instagram.com/science.driven/