Algoritmos recursivos más comunes en JavaScript, Python y PHP

Algoritmos recursivos más comunes en JavaScript, Python y PHP

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/

https://www.tiktok.com/@science.driven

https://www.youtube.com/@ScienceDriven

Regresar al blog

Deja un comentario