DC , 25 22 байт
9k5v1+2/3?*1-^5v/0k2/p
Спробуйте в Інтернеті!
Або збережіть програму у файлі та запустіть її, ввівши
dc -f *filename*
Програма приймає невід'ємне ціле число n на stdin, і вона виводить суму перших n парних чисел Фібоначчі на stdout. (Послідовність Фібоначчі прийнято починати з 0, згідно з прикладами ОП.)
Ця програма використовує формулу (F (3n-1) -1) / 2 для суми перших n парних чисел Фібоначчі, де F - звичайна функція Фібоначчі, задана F (0) = 0, F (1) = 1, F (n) = F (n-2) + F (n-1) при n> = 2.
DC - калькулятор на основі стека. Ось детальне пояснення:
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.
У цей момент число (1 + sqrt (5)) / 2 знаходиться у верхній частині стека.
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.
У цій точці 3n-1 знаходиться у верхній частині стека (де n - вхід), а (1 + sqrt (5)) / 2 - другий зверху.
^ # 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).
У цей момент число у верхній частині стека дорівнює (((1 + sqrt (5)) / 2) ^ (3n-1)) / sqrt (5). Найближче ціле число до цього числа F (3n-1). Зауважте, що F (3n-1) - завжди непарне число.
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.