Red de conocimiento informático - Conocimiento informático - ¿Cómo definir recursivamente?

¿Cómo definir recursivamente?

La técnica de programación de un programa que se llama a sí mismo se llama recursividad. Un procedimiento o función tiene un método en su definición o descripción que se llama a sí mismo directa o indirectamente. Por lo general, transforma un problema grande y complejo en un problema más pequeño similar al problema original a resolver. La estrategia recursiva puede utilizar muy pocos programas para describir los cálculos repetidos necesarios en el proceso de resolución de problemas, lo que reduce en gran medida la cantidad de código del programa. El poder de la recursividad radica en definir colecciones infinitas de objetos con declaraciones finitas. En términos generales, la recursividad requiere condiciones de contorno, un segmento de avance recursivo y un segmento de retorno recursivo. Cuando no se cumplen las condiciones de contorno, avanza recursivamente; cuando se cumplen las condiciones de contorno, regresa recursivamente. Nota: (1) La recursión se refiere a llamarse a sí mismo en un procedimiento o función; (2) Cuando se utiliza una estrategia recursiva, debe haber una condición de fin de recursión clara, que se denomina salida recursiva.

Los algoritmos recursivos se utilizan generalmente para resolver tres tipos de problemas: (1) Definición recursiva de datos. (Función de Fibonacci) (2) Utilice algoritmos recursivos para resolver problemas. (Retroceso) (3) Definir recursivamente la forma estructural de los datos. Desventajas de la recursividad: los algoritmos recursivos tienen una baja eficiencia en la resolución de problemas. Durante la llamada recursiva, el sistema abre una pila para almacenar los puntos de retorno y las cantidades locales de cada capa. Demasiada recursividad puede provocar fácilmente un desbordamiento de la pila. Por ejemplo: #include0, el programa se puede escribir así: programa fac2var n: entero; función fac (n: entero): número real comenzar si n=0 entonces fac:=1 en caso contrario fac:= n * fac(n -1); finalizar; Iniciar escritura(' n = '); readln(n); writeln('fac(', n ')= ', fac(n):6:0); Ejemplo 2 Una escalera tiene n escalones. Puedes subir las escaleras en un escalón o en dos escalones. Haz un programa y cuenta * *cuántas formas diferentes de moverte. Supongamos que el número de n pasos es f(n), obviamente 1 n = 1 f (n) = {2 n = 2 f(. 2 La secuencia programable es la siguiente: Programación loutivar n: entero; función f (x: entero ) :integer; comenzar si x=1 entonces f:=1 de lo contrario si x=2 entonces f:=2 de lo contrario f:= f(x-1)+f(x-2); ' ); leer como (n); writeln('f(', n, ') = ', F(n)) end 2.2 ¿Cómo diseñar el algoritmo recursivo 1? Determinar la condición de frontera (final): resolver el. siguiente pregunta 1. Encuentra el número máximo 2.1+2+3+...+n 3. Encuentra el producto de n enteros 4. Encuentra la secuencia dada 1, 1, 2, 4, 7. 13, 24, 44,. .. Encuentre el enésimo elemento de la regla de numeración... 2.3 Ejemplos típicos Ejemplo 3 El problema de Fanta es como se muestra en la figura: Se sabe que hay tres agujas representadas por 1, 2, 3 respectivamente, y la regla de movimiento es. : Use 2 agujas como agujas de paso, mueva solo una placa a la vez, y cada aguja no puede tener una placa grande presionando una placa pequeña. Encuentre el plan con la menor cantidad de movimientos: programa Fanta n: entero programa mover ( n, a), b, c: entero); si n=1, comience, luego escriba ln(a, '->', c) de lo contrario, comience a mover (n-1, a, c, b); (a, '-> ', c); mover (n-1, b, a, c); finalizar la escritura (' Ingresar n = '); , 2, 3); Fin. La idea de clasificación rápida en el Ejemplo 4 es: primero seleccione un elemento de la secuencia de datos, coloque todos los elementos más pequeños que el elemento en la secuencia a la derecha o izquierda de él, y luego. procese los lados izquierdo y derecho de la misma manera hasta que cada uno La longitud de la secuencia a procesar sea 1 y se complete el procesamiento.

El programa es el siguiente: programa kspv variable a: matriz [0..entero largo de 10000]; I: entero; proceso de clasificación rápida (l, r: var i, j, medio: entero largo); ; j: = r; mid:= a[(l+r)div 2]; repetir mientras a[i]<mid do company(one); a[0]:= a[I]; a[I]:= a[j]; a[j]:= a[0]; inc(一); ,r); si i<r entonces fastsort(l,j); end; start write('datos de entrada:'); (1, n); escribir('datos de salida:'); para i:=1 an, escribir (a[i], ' ');