Cómo llamar función recursiva en Rust?

Publicado por Brisa
hace 8 meses

Hola a todos!

Estoy teniendo un problema para llamar una función recursiva en Rust. He estado investigando y probando diferentes cosas, pero no logro solucionarlo. Les agradezco mucho si me pueden ayudar.

El problema que tengo es que estoy implementando una función que calcula el factorial de un número usando recursividad. El código que tengo es el siguiente:

fn factorial(n: u32) -> u32 {
    if n == 0 {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

fn main() {
    let num = 5;
    let result = factorial(num);
    println!("El factorial de {} es {}", num, result);
}

El error que estoy obteniendo es el siguiente:

error[E0425]: cannot find value `factorial` in this scope
 --> src/main.rs:6:23
  |
6 |         return n * factorial(n - 1);
  |                       ^^^^^^^^ not found in this scope
  |
  = note: this error originates in a macro outside of the current crate (in Nightly builds, run with `-Z external-macro-backtrace` for a backtrace)

error: aborting due to previous error

He intentado usar pub, cambiar el orden de las funciones, pero sigo obteniendo el mismo error. ¿Alguien tiene alguna idea de cómo resolver esto?

¡Gracias de antemano!

Rust función recursiva llamada
Respuesta de Gordon Shumway
hace 8 meses

¡Hola Brisa!

El código que proporcionaste debería funcionar correctamente tal y como está escrito. La función factorial es recursiva y está definida correctamente.

De hecho, probé el código en mi entorno local y compila y ejecuta sin problemas, devolviendo el resultado correcto. La función factorial está en el ámbito correcto y es llamada adecuadamente dentro de sí misma. Rust permite este tipo de llamadas recursivas sin problemas.

Es posible que el error que estás experimentando provenga de un problema con tu entorno de desarrollo o alguna versión específica del compilador que pueda tener un bug (aunque esto último es bastante poco probable si estás utilizando una versión estable del compilador Rust).

Te sugeriría intentar lo siguiente:

  1. Asegúrate de que el código que proporcionaste es exactamente el mismo que estás compilando. Es fácil pasar por alto cosas cuando uno está cambiando de contexto.
  2. Verifica que estás utilizando la última versión estable de Rust. Puedes hacerlo ejecutando rustup update en la terminal.
  3. Intenta compilar el código utilizando rustc directamente en la terminal, para ver si el problema proviene de tu editor o entorno de desarrollo integrado (IDE).
  4. Si estás usando un IDE, reinicia el editor y verifica si el IDE está detectando correctamente el espacio de nombres de tu proyecto.

Puedes utilizar el siguiente comando para compilar tu programa con rustc:

rustc src/main.rs

Y luego ejecutarlo con:

./main  # o .\main.exe si estás en Windows

Si al seguir estos pasos sigues teniendo problemas, intenta dar más detalles o verificar si hay otros archivos en tu proyecto que puedan estar causando conflicto.

¡Espero que esto ayude a resolver el problema!