مقدماتی:
یکسری مفاهیم ابتدایی از دنباله ی فیبوناچی:
- f(0) = 0 ; f(1) = 1 ; f(n > 2) = f(n-1) + f(n-2);
-
Digits:
- f(50) : 10 digits
- f(100): 20 digits
- f(500): 105 digits
- f(1000): 210 digits
- f(4800): 1000 digits
-
Negative fibo:
F−8
F−7
F−6
F−5
F−4
F−3
F−2
F−1
F0
F1
F2
F3
F4
F5
F6
F7
F8
−21
13
−8
5
−3
2
−1
1
0
1
1
2
3
5
8
13
21
کد زیر با اردر n سری فیبوناچی از ۱ تا n را بدست می آورد اما نکته ای که باید اینجا به آن دقت کرد این است که سرعت رشد تعداد ارقام در فیبوناچی بسیار زیاد است. بدین صورت که اگر آرایه fibo از نوع int باشد n <= 45 و اگر long long باشد n<=92 پس برای n>92 باید از روش دیگری استفاده کرد که در ادامه به بررسی آن می پردازیم.
fibo[0] = 0; fibo[1] = 1;
for( int i = 0 ; i < n ; i++ ) // n baraye int ۴۵ ba baraye long long kamtar az ۹۲ mibashad
fibo[i] = fibo[i-1] + fibo[i-2];
البته فرمولی با اردر ۱ وجود دارد که به شرح زیر است:
اما به دلیل توان n که در این فرمول وجود دارد
استفاده از این فرمول توصیه نمی شود.
متوسط:
برای محاسبه ی دنباله ی فیبوناچی ارقام بزرگتر از ۹۲ باید از آرایه ی ۲ بعدی استفاده کرد بدین صورت که درایه ی اول برای شماره ی فیبوناچی و درایه دوم برای رقم های فیبوناچی اختصاص پیدا می کند. {fibo[n][k برابر است با رقم k از سمت راست برای(F(n.
طریقه ی محاسبه:
fibo[0][0] = 0; num[0] = 0;
fibo[1][0] = 1; num[1] = 0;
for( int i = 2 ; i < 5000 ;i ++ )
{
for( int j = 0 ; j < 10005; j++ )
fibo[i][j] = fibo[i-1][j] + fibo[i-2][j];
for( int j = 0 ; j < 10005; j++ )
{
if(fibo[i][j] >= 10 )
{
fibo[i][j+1] += fibo[i][j] / 10;
fibo[i][j] %= 10;
}
if( fibo[i][j] != 0 ) num[i] = j;
}
}
- محتوای آرایه num درایه آخرین خانه ی پر شده یا به عبارت دیگر آدرس آخرین رقم دنباله است.
- در هنگام استفاده از متغیر fibo باید به این نکته توجه کرد که [fibo[i][0 رقم یکان و
[ [fibo[i][ num[n آخرین رفم دنباله می باشد.