C#: A Fibonacci sorozat előállítása

Programozással kapcsolatos cikkek / C# (49 katt)

A Fibonacci-számok előállítási szabályát a következő módon lehet megadni:

F(0) := 0
F(1) := 1
F(n) := F(n-1) + F(n-2), ha n > 1

Azaz pl. F(2) = 1 + 0 = 1, F(3) = 1 + 1 = 2, F(4) = 2 + 1 = 3, F(5) = 3 + 2 = 5 stb.

Bővebb infó a Fibonacci-számokról:
https://hu.wikipedia.org/wiki/Fibonacci-sz%C3%A1mok

Ha C# nyelven egy olyan programot kell írni, amely kiírja az első 100 Fibonacci-számot, akkor hamar korlátba ütközünk, ui. az int vagy a long típus egy bizonyos határon már nem tudja helyesen tárolni a számokat, mivel a sorozat tagjai igen gyorsan növekednek.

Erre a problémára az egyik lehetséges megoldás a decimal típus használata:


void PrintFirst100FibonacciNumbers1()
{
var fibonacci = new decimal[100];

fibonacci[0] = 0;
fibonacci[1] = 1;

for (int k = 2; k < 100; k++)
{
fibonacci[k] = fibonacci[k - 1] + fibonacci[k - 2];
}

foreach (var number in fibonacci)
{
Console.WriteLine(number);
}
}



A másik lehetséges megoldás a BigInteger típus használata, amely a System.Numerics névtérben található:


using System.Numerics;
...
static void PrintFirst100FibonacciNumbers2()
{
var fibonacci = new BigInteger[100];

fibonacci[0] = 0;
fibonacci[1] = 1;

for (int k = 2; k < 100; k++)
{
fibonacci[k] = fibonacci[k - 1] + fibonacci[k - 2];
}

foreach (var number in fibonacci)
{
Console.WriteLine(number);
}
}




Az előző programot a sorszámok kiírásával kiegészítve a következő eredményt kapjuk az első 100 Fibonacci-számra:

0: 0
1: 1
2: 1
3: 2
4: 3
5: 5
6: 8
7: 13
8: 21
9: 34
10: 55
11: 89
12: 144
13: 233
14: 377
15: 610
16: 987
17: 1597
18: 2584
19: 4181
20: 6765
21: 10946
22: 17711
23: 28657
24: 46368
25: 75025
26: 121393
27: 196418
28: 317811
29: 514229
30: 832040
31: 1346269
32: 2178309
33: 3524578
34: 5702887
35: 9227465
36: 14930352
37: 24157817
38: 39088169
39: 63245986
40: 102334155
41: 165580141
42: 267914296
43: 433494437
44: 701408733
45: 1134903170
46: 1836311903
47: 2971215073
48: 4807526976
49: 7778742049
50: 12586269025
51: 20365011074
52: 32951280099
53: 53316291173
54: 86267571272
55: 139583862445
56: 225851433717
57: 365435296162
58: 591286729879
59: 956722026041
60: 1548008755920
61: 2504730781961
62: 4052739537881
63: 6557470319842
64: 10610209857723
65: 17167680177565
66: 27777890035288
67: 44945570212853
68: 72723460248141
69: 117669030460994
70: 190392490709135
71: 308061521170129
72: 498454011879264
73: 806515533049393
74: 1304969544928657
75: 2111485077978050
76: 3416454622906707
77: 5527939700884757
78: 8944394323791464
79: 14472334024676221
80: 23416728348467685
81: 37889062373143906
82: 61305790721611591
83: 99194853094755497
84: 160500643816367088
85: 259695496911122585
86: 420196140727489673
87: 679891637638612258
88: 1100087778366101931
89: 1779979416004714189
90: 2880067194370816120
91: 4660046610375530309
92: 7540113804746346429
93: 12200160415121876738
94: 19740274219868223167
95: 31940434634990099905
96: 51680708854858323072
97: 83621143489848422977
98: 135301852344706746049
99: 218922995834555169026



Előző oldal Kapitány