Entiendo cómo leer la recursividad pero no sé cómo resolverlos.
Las tres piezas de código siempre serán las mismas:
- Identifique malas condiciones para la función, si las hay (por ejemplo, arroje una excepción si obtiene un número negativo donde no está permitido).
- Devuelve un valor para uno o más casos “básicos” simples.
- Devuelve un valor para el caso general que lo acerca a un caso base.
El n. ° 3 suele ser el más difícil de estos, y a menos que reconozca el n. ° 3, probablemente no se dará cuenta de que el caso de la función es recursivo. Pero mire un problema y piense “¿cómo podría hacerlo más pequeño”?
- Cómo hacer un horario para aprender DS y algoritmos en un mes
- ¿Cuál es el problema con mi código de C ++ para SPOJ.com - Problema PALIN?
- ¿Es posible la generación de números aleatorios verdaderos?
- Soy un programador promedio, me encanta codificar en Java y estoy tratando de mejorar mis habilidades de codificación algorítmica. ¿Cómo puedo mejorarlos?
- ¿Cómo funcionan los algoritmos de procesamiento de cadenas en CUDA?
Así que aquí, prueba estos. Vea si puede pensar en cómo hacerlos más pequeños. Puede escribir el código si lo desea, pero esto es realmente solo un ejercicio de pensamiento.
Ejemplos:
- Desea calcular el enésimo número de Fibonacci. (Sí, sé que ya hiciste esto. Sí, el código es terrible).
- Desea ver cuántos archivos en este directorio y todos los que están debajo comienzan con la letra T.
- Desea escribir un método de “evaluación” que tome una cadena con números y signos más y sume los números, por lo que “3 + 5 + 7” le dará 15.
- Otra “evaluación”, pero esta va a restar números, por lo que “18-5-2” debería dar 11.
- Tienes un grupo de personas. Para cada persona, sabes cuánto dinero tienen. Desea saber la cantidad total que tiene el grupo. (Este no es naturalmente recursivo, pero ciertamente puedes resolverlo recursivamente).
Respuestas:
- El quinto número es el cuarto más el tercero. El noveno número es el octavo más el séptimo. Entonces fib (n) = fib (n-1) + fib (n-2).
- Es el número de archivos en este directorio que comienzan con T más el número en cada directorio debajo de este.
- Su caso base podría ser solo un número. Esto podría ser evaluar (“3”) + evaluar (“5 + 7”) o evaluar (“3 + 5”) + evaluar (“7”).
- Es evaluar (“18-5”) – evaluar (“2”). (Tenga en cuenta que dividirlo de otra manera da la respuesta incorrecta, ya que estaría haciendo 18- (5-2). Realmente me gusta este ejemplo: puede escribir una “calculadora” que funcione completamente y tome una expresión y la evalúe Es un poco complicado para los desarrolladores principiantes, pero es un problema interesante (recuerdo haberlo hecho por diversión cuando aprendí la recursión).
- Es la cantidad que tiene esta persona más la cantidad que tiene el resto de la gente.
Después de pensar en cómo hacerlos más pequeños, piensa en lo pequeños que pueden llegar a ser. ¿Cuál es el conjunto de valores más pequeño que puede obtener? Tal vez ese es el único caso base que necesita. Agregue ese y vea si es suficiente.
Después de tener sus casos base, asegúrese de que cualquier entrada se maneje correctamente. ¿Pensaste en nulo? ¿Tiene sentido para tu problema? ¿Qué pasa con un número negativo? ¿Un número realmente grande? ¿Una cuerda vacía? ¿Una cuerda larga?