Ejemplo de Reescritura de Código
Este ejemplo muestra cómo analizar y optimizar código usando DeepSeek, incluyendo manejo de errores, comentarios y mejoras de rendimiento.
Tarea
Analice y optimice el siguiente código que es ineficiente y carece de manejo de casos límite:
def fib(n):
    if n <= 2:
        return n
    return fib(n-1) + fib(n-2)Prompt
El código anterior es ineficiente y no maneja casos límite. Por favor, explique los problemas y soluciones, y optimice el código.
Respuesta
Análisis del Problema
Esta implementación de la función Fibonacci fib(n) utiliza recursión. El código es simple pero tiene los siguientes problemas:
- 
Cálculos Redundantes: Las llamadas recursivas resultan en muchos cálculos repetidos. Por ejemplo, al calcular
fib(5), los valores defib(3)yfib(2)se calculan múltiples veces, reduciendo la eficiencia. - 
Manejo Insuficiente de Casos Límite: Mientras que el caso
n <= 2está manejado, el cason < 0no se considera. La función devuelve resultados incorrectos para entradas negativas. - 
Límite de Profundidad Recursiva: Para valores grandes de
n, la profundidad de recursión puede exceder el límite estándar de Python y causar unRecursionError. 
Soluciones
- 
Usar Memoización: Almacenar números Fibonacci calculados en caché para evitar cálculos redundantes y mejorar la eficiencia.
 - 
Manejo de Casos Límite: Agregar verificación para
n < 0y devolver un mensaje de error apropiado o un valor predeterminado. - 
Iteración en lugar de Recursión: La recursión es elegante pero ineficiente para conjuntos de datos grandes. Usar un bucle para calcular números Fibonacci y evitar el límite de profundidad recursiva.
 
Código Optimizado
Método 1: Recursión con Memoización
def fib(n, memo={}):
    if n < 0:
        raise ValueError("La entrada debe ser un entero no negativo")
    if n <= 2:
        return 1
    if n in memo:
        return memo[n]
    memo[n] = fib(n-1, memo) + fib(n-2, memo)
    return memo[n]Método 2: Iteración
def fib(n):
    if n < 0:
        raise ValueError("La entrada debe ser un entero no negativo")
    if n <= 2:
        return 1
    
    a, b = 1, 1
    for _ in range(3, n+1):
        a, b = b, a + b
    return bExplicación
- 
Recursión con Memoización:
- Usa un diccionario 
memopara almacenar números Fibonacci calculados - Verifica 
memoantes de cada llamada recursiva y devuelve el resultado directamente si está disponible - Lanza un 
ValueErrorpara entradas negativas 
 - Usa un diccionario 
 - 
Iteración:
- Usa variables 
aybpara almacenar los dos últimos números Fibonacci - Calcula números Fibonacci en un bucle desde 
3hastan - También lanza un 
ValueErrorpara entradas negativas 
 - Usa variables 
 
Resumen
El código optimizado mejora la eficiencia y maneja adecuadamente los casos límite. Tanto la memoización como el método iterativo son técnicas de optimización efectivas, y la elección entre ellas depende de los requisitos específicos y escenarios.
Código para Generar la Respuesta
from openai import OpenAI
client = OpenAI(
    base_url="https://api.deepseek.com/",
    api_key="<YOUR_API_KEY>"
)
completion = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {
            "role": "user",
            "content": "El código anterior es ineficiente y no maneja casos límite. Por favor, explique los problemas y soluciones, y optimice el código."
        }
    ]
)
print(completion.choices[0].message.content)