No, una función recursiva debe llamarse a sí misma.
f (x) {return x ^ 2} simplemente devuelve el cuadrado del valor de entrada. Esa es una ecuación no lineal porque la pendiente de la ecuación no es una constante (no es una línea recta cuando se traza en un gráfico). Una función lineal es un “polinomio de grado uno o menos”, y en términos más simples solo significa que f (x, y, z) = ax + by + cz + constante, donde ab y c son constantes. O f (x) = ax + constante, o f (x, y) = ax + por + constante. Etc.
Puede escribir una función recursiva para calcular x ^ 2 si lo desea, pero eso no tiene sentido ya que puede especificar f (x) = x ^ 2 en su computadora. La función recursiva para calcular la potencia de xan sería similar a:
- ¿Cuál es el polinomio más pequeño que puede atravesar todos los conjuntos de n puntos? ¿Hay uno?
- Estoy tomando SL Maths para el Diploma IB, ¿sería esto suficiente para universidades como UCB, UCLA, GaTech for Computer Science?
- ¿Qué tan rápido es el algoritmo de clasificación altamente paralelo más rápido, teóricamente? Quiero decir, la clasificación puede hacer tantos hilos separados como desee y todos se ejecutan simultáneamente. ¿Mejoraría sobre el límite [math] \ Omega (n \ log n) [/ math] para un solo subproceso?
- ¿Por qué el lenguaje de las palabras a * b * es decidible?
- ¿Existe una función que defina la relación entre el dígito inicial de un entero y el número de términos cuando se agrega infinitamente?
definir la potencia de la función (x, n)
si n == 0 entonces {return 1}
más {return x * power (x, n-1)}
Uno de mis ejemplos favoritos de una función recursiva es la solución al problema de caída de huevos y rascacielos. Si tiene 2 huevos idénticos, que se rompen cuando se caen desde o sobre un piso determinado X. X es desconocido. Tiene un rascacielos de altura Y. Necesita una forma de determinar (independientemente de la suerte) el piso exacto X en el que se rompen los huevos. Solo puede visitar 14 pisos, y si un huevo no se rompe, puede recuperarlo y probar otro piso (esto cuenta como 1 visita solamente, por lo que la recuperación no cuesta nada). El huevo no se daña por caídas que no lo rompen.
La respuesta a las 14 visitas, el caso de 2 huevos es que puedes investigar un rascacielos de 105 pisos. La lógica es que vas al piso 14, y si el huevo se rompe, vuelves a bajar a 1 con tu último huevo e intentas secuencialmente 1, 2, 3, … 13 con tus 13 visitas restantes. Eso garantiza una respuesta. Si el huevo no se rompe a los 14, sube 13 pisos más a 27. Si se rompe, baja a 15 y prueba 15, 16, … 26 con las 12 visitas restantes. Y así. Entonces 14 + 13 +… + 2 + 1 = 105.
¿Qué pasa si tienes 3 huevos y 15 visitas? Si intenta resolverlo, verá que se reduce rápidamente a un problema de 2 huevos y 14 visitas si el primer huevo se rompe en la primera visita. Es complicado calcularlo en su mente, pero una computadora puede hacer esto realmente rápido.
El problema general: ¿cuántos pisos puede tener el rascacielos si tengo N huevos y M visitas?
# define una función, plantas (m, n) que toma 2 entradas. m son visitas, n son huevos.
definir pisos de función (m, n)
si m == 0 entonces {floors_covered = 0}
de lo contrario, si n == 0 entonces {floors_covered = 0}
más {init_value = m
para i = 1: (m-1) {
valor_inicial = valor_inicial + pisos (i, n-1)
}
pisos_cubiertos = valor_inicial}
pisos de retorno cubiertos
¿Observa cómo la función llama a los pisos (i, n-1) dentro del bucle for? Entonces, la función recursiva pisos () llama a pisos (), que luego llama a pisos () … Hay casos particulares en los que los pisos () terminarán sin llamar a los pisos (), y es cuando tienes 0 huevos o 0 visitas.
Puede ejecutar la lógica de las 14 visitas, el caso de 2 huevos con la función: floor (14,2) establecerá init_value en 14 y ejecutará un bucle para i = 1:13, init_value agrega el resultado de floor (i, 1) a sí mismo. Sabemos que con 1 huevo los pisos cubiertos son exactamente m, entonces 14 agregará 1, 2, 3, …, 13 a sí mismo. Eso es 1 + 2 + … + 14 = 105.