Estoy estudiando para un examen final y tengo problemas con esta pregunta:
El siguiente algoritmo recursivo FIB toma como entrada un número entero y devuelve el -ésimo número de Fibonacci :
Algorithm FIB(n):
if n = 0 or n = 1 then
f = n
else
f = FIB(n-1) + FIB(n-2)
endif
return f
Dejar
Sea la cantidad de adiciones hechas por el algoritmo FIB(n)
, el número total de veces que el
-función en caso contrario se llama. Demuestra que para todos
Estoy pensando que debería usar la recurrencia para resolverlo, pero estoy completamente perdido. ¡Gracias de antemano!
Informática FIB(0)
ya FIB(1)
no tiene añadidos, ya que vuelve n
.
La informática FIB(n)
tiene una adición, más tantas como FIB(n-1)
y FIB(n-2)
tenga.
Entonces tenemos
Ahora, usa la inducción matemática para comprobar que y comenta si te quedas atascado.
Si reemplazamos la rama "entonces" con
f = 1
entonces el número de adiciones no cambia, porque nunca hay ninguna dependencia de control en el valor devuelto.
Sin embargo, el algoritmo modificado calcula
en vez de
. Y la forma en que calcula
es sumando unos, y nunca usando un resultado intermedio más de una vez. Por lo tanto, las adiciones forman los nodos internos en un árbol binario 1
en cada hoja, por lo que hay
hojas. El árbol binario tiene un nodo interno menos de los que tiene hojas, por lo que debe haber
adiciones
Mire su algoritmo y conviértalo en una función que calcule la cantidad de sumas realizadas.
Algoritmo nFIB(n):
if n = 0 or n = 1 then
f = 0
else
f = nFIB(n-1) + nFIB(n-2) + 1 (for the addition)
endif
return f
Entonces y esto está bastante cerca de la recurrencia excepto por eso " ".
Para deshacerse de eso (y se necesita algo de experiencia para ver rápidamente cómo hacerlo), cámbielo agregando a ambos lados) para obtener .
Por lo tanto satisface la misma recurrencia que pero posiblemente con un desplazamiento diferente, por lo que para algunos . Jugar da , entonces .
pirámide
Vedran Sego
Promedio
Vedran Sego
a[0..4] = [0, 0, 1, 2, 4]
yF[0..5] = [0, 1, 1, 2, 3, 5]
, entoncesFIB(n-1)
,FIB(n-2)
, y el extra+1
es luego sumar esos dos.