¿Cómo definir recursivamente?
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], ' ');