dc , 25 22 bytes
9k5v1+2/3?*1-^5v/0k2/p
Pruébalo en línea!
O guarde el programa en un archivo y ejecútelo escribiendo
dc -f *filename*
El programa acepta un número entero no negativo n en stdin, y genera la suma de los primeros n números pares de Fibonacci en stdout. (La secuencia de Fibonacci se toma para comenzar con 0, según los ejemplos del OP).
Este programa usa la fórmula (F (3n-1) -1) / 2 para la suma de los primeros n números pares de Fibonacci, donde F es la función habitual de Fibonacci, dada por F (0) = 0, F (1) = 1, F (n) = F (n-2) + F (n-1) para n> = 2.
dc es una calculadora basada en pila. Aquí hay una explicación detallada:
9k # Sets the precision to 9 decimal places (which is more than sufficient).
5v # Push the square root of 5
1+ # Add 1 to the number at the top of the stack.
2/ # Divide the number at the top of the stack by 2.
En este punto, el número (1 + sqrt (5)) / 2 está en la parte superior de la pila.
3 # Push 3 on top of the stack.
? # Read a number from stdin, and push it.
\* # Pop two numbers from the stack, multiply them, and push the product
1- # Subtract 1 from the number at the top of the stack.
En este punto, 3n-1 está en la parte superior de la pila (donde n es la entrada) y (1 + sqrt (5)) / 2 es el segundo desde la parte superior.
^ # Pop two numbers from the stack (x, then y), compute the power y^x, and push that back on the stack.
5v/ # Divide the top of the stack by sqrt(5).
En este punto, el número en la parte superior de la pila es (((1 + sqrt (5)) / 2) ^ (3n-1)) / sqrt (5). El entero más cercano a este número es F (3n-1). Tenga en cuenta que F (3n-1) siempre es un número impar.
0k # Change precision to 0 decimal places.
2/ # Divide the top of the stack by 2, truncating to an integer.
p # Print the top of the stack on stdout.