dc , 25 22 bayt
9k5v1+2/3?*1-^5v/0k2/p
Çevrimiçi deneyin!
Veya programı bir dosyaya kaydedin ve yazarak çalıştırın
dc -f *filename*
Program, negatif olmayan bir tamsayıyı kabul n stdin ve ilk toplamını verir N stdout'ta da Fibonacci sayıları. (Fibonacci sekansı, OP'nin örneklerine göre 0 ile başlamak için alınır.)
Bu program, ilk n çift Fibonacci sayısının toplamı için (F (3n-1) -1) / 2 formülünü kullanır; burada F, F (0) = 0, F (1) = ile verilen olağan Fibonacci işlevidir. 1, n> = 2 için F (n) = F (n-2) + F (n-1).
dc, yığın tabanlı bir hesap makinesidir. İşte ayrıntılı bir açıklama:
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.
Bu noktada, (1 + sqrt (5)) / 2 sayısı yığının en üstündedir.
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.
Bu noktada, 3n-1 yığının üstündedir (burada n giriştir) ve (1 + sqrt (5)) / 2 üstten ikinci sıradadır.
^ # 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).
Bu noktada, yığının üstündeki sayı (((1 + sqrt (5)) / 2) ^ (3n-1)) / sqrt (5) 'tir. Bu sayıya en yakın tam sayı F'dir (3n-1). F (3n-1) 'in her zaman tek bir sayı olduğunu unutmayın.
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.