Mucha gente ha dado pseudocódigo, así que en su lugar daré una respuesta más teórica, porque la recursión es un concepto difícil de entender al principio pero hermoso después de que lo hagas.
Cuando encuentre un algoritmo para resolver este problema (o problemas en general), piense cuál es la solución antes de pensar cómo llegar a él.
Entonces que es la solucion aqui? Es útil enmarcar matemáticamente la pregunta, x = suma de (primeros n enteros positivos impares). Podríamos usar algunos símbolos matemáticos sofisticados para esto, pero lo importante es obtener una comprensión semántica clara de lo que está sucediendo. Piense en x como algo que existe inherentemente como un número en alguna realidad trascendental: lo que debe hacer es descubrir cuáles son las propiedades de este número.
- Java (lenguaje de programación): ¿Es correcto este método para insertar un nuevo nodo en un árbol de búsqueda binario?
- ¿Hay algún conocimiento de programación que pueda utilizar / ayudaría a aprender ajedrez?
- ¿Cuál es el código C ++ más simple para el algoritmo A *?
- ¿Cómo se implementa el alogoritmo de Timsort en Java?
- ¿Cuál es la diferencia entre consultas DNS iterativas y recursivas?
Entonces, ¿qué es x? Bueno, x es una función de n, ¿verdad? En otras palabras, depende lógicamente del valor de n. Llamemos a esta función foo. Si n es 1, la respuesta es simplemente 1 (entonces foo (n) es 1). Esto se llama condición de borde , en terminología recursiva. Si n no es uno, entonces x es n + foo (n-2). Simplemente pasa “foo” el enésimo número entero impar (donde el enésimo número entero impar es 2n-1), y la función funciona lógicamente.
En resumen, x es 1 cuando n es 1. De lo contrario, es (el enésimo número impar) + (la suma de todos los n-1 números impares).
(También puede hacerlo al revés y hacer que 2n-1 sea la condición de borde y subir recursivamente la cadena de números, pero esa es solo otra forma de ver la realidad subyacente).
En cuanto a cómo codificar esto en un idioma determinado, otras personas han dado ejemplos, y hay varias formas de codificarlo. Lo importante es comprender lógicamente lo que quiere hacer y por qué funciona; entender qué es x, conocer sus propiedades y qué lo hace funcionar. Conozca la naturaleza del problema y puede codificarlo de muchas maneras. Puede codificarlo usando recursividad o usando bucles. Puede codificarlo con una máquina de escribir o una mariposa. Comprender el por qué, no solo el cómo, es lo que hace a un buen programador.