Acciones

2010 Ejercicio 2: Sumar los términos pares de la sucesión de Fibonacci que no superen los 4000000

De Software Libre para la Enseñanza y el Aprendizaje de las Matemáticas (2010-11)

Enunciado

Sumar los términos pares de la sucesión de Fibonacci menores de 4000000.

Solución

La solución que propongo está escrita en lenguaje Groovy. Aunque el enunciado presenta la sucesión de Fibonacci como 1,2,3,5,... en muchos otros sitios aparece como 0,1,1,2,3,5,... De todas formas, como nos quedamos con los términos pares no hay problema

Solución: 4613732. Primero construyo la sucesión y a continuación sumo los términos pares. Obsérvese el uso de índices negativos para acceder a las posiciones última y penúltima de la lista y así construir el siguiente término de la sucesión

def sucesion = [1, 2]

while (sucesion.last() < 4000000) {
    sucesion << sucesion .getAt(-1) + sucesion .getAt(-2)
}

def suma_pares = sucesion.findAll { it % 2 == 0 }.sum()
println suma_pares


Solución alternativa (con wxMaxima 0.8.4)

La solución que propongo está escrita en Maxima, que es un sistema de cálculo simbólico escrito en Lisp.

Mi solución es: 3524578. Esta solución se corresponde con la suma de n números de Fibonacci, siendo n par y Fib[n] menor que 4000000. Concretamente el algoritmo realiza un total de 34 iteraciones (de la 0 a la 33), siendo el último término de Fibonacci sumado Fib[32]. El algoritmo utilizado es el siguiente:

 (%i1) 
        fib1[0]:0$
        fib1[1]:1$
        fib1[n]:=fib1[n-1]+fib1[n-2]$
        s: 0$
        for i: 0 step 1 while fib1[i] < 4000000 do 
        (
          print ("Fibonacci it. ",i," = ",fib1[i]),  
          if (i >= 2) then (
            if (mod(i,2) = 0) then(
              s: s+fib1[i],
              print("La suma par es: ", s)
            )
          )
        );

Dicho algoritmo imprime para cada iteración i el término de la sucesión de Fibonacci correspondiente (Fib[i]), así como la suma acumulada si la iteración i es par. Un ejemplo del resultado obtenido será el siguiente:

(%o1)
        Fibonacci it. 0 = 0
        Fibonacci it. 1 = 1
        Fibonacci it. 2 = 1
        La suma par es: 1
        Fibonacci it. 3 = 2
        Fibonacci it. 4 = 3
        La suma par es: 4
        Fibonacci it. 5 = 5
        Fibonacci it. 6 = 8
        La suma par es: 12
        ....
        ....
        Fibonacci it. 30 = 832040
        La suma par es: 1346268
        Fibonacci it. 31 = 1346269
        Fibonacci it. 32 = 2178309
        La suma par es: 3524577
        Fibonacci it. 33 = 3524578