首頁 > 後端開發 > C#.Net教程 > C# 中的斐波那契數列

C# 中的斐波那契數列

王林
發布: 2024-09-03 15:34:44
原創
832 人瀏覽過

C#中的斐波那契數列斐波那契數列是著名的數列數列之一。序列是 0, 1, 1, 2, 3, 5, 8…。斐波那契數列從零和一開始,下一個數字是前兩個數字的總和。據說斐波那契數列是由Leonardo Pisano Bigollo先生在13世紀創造的。斐波那契數列對於某些場景很有用。基本上它最初是用來解決兔子問題,即一對兔子出生的數量。斐波那契數列在其他問題中也很有用。

斐波那契數列邏輯

與斐波那契數列一樣,該數字是其前面兩個數字的總和。因此,如果我們有一個斐波那契數列,例如0, 1, 1, 2, 3, 5, 8, 13, 21…根據這個,下一個數字將是其前兩個數字的總和,例如13 和21。所以下一個數字是 13 +21=34。

這是產生斐波那契數列的邏輯

F(n)= F(n-1) +F(n-2)

其中 F(n) 是術語編號,F(n-1) +F(n-2) 是前面值的總和。

所以如果我們有系列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...

依邏輯F(n)= F(n-1) +F(n-2)

F(n)= 55+89

F(n)= 144

下一學期是 144。

建立斐波那契數列的各種方法

斐波那契數列可以透過多種方式產生。

1.迭代方法

這種方式是產生系列的最簡單的方法。

代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespaceFibonacciDemo
{
classProgram
{
staticint Fibonacci(int n)
{
intfirstnumber = 0, secondnumber = 1, result = 0;
if (n == 0) return 0; //It will return the first number of the series
if (n == 1) return 1; // it will return  the second number of the series
for (int i = 2; i<= n; i++)  // main processing starts from here
{
result = firstnumber + secondnumber;
firstnumber = secondnumber;
secondnumber = result;
}
return result;
}
staticvoid Main(string[] args)
{
Console.Write("Length of the Fibonacci Series: ");
int length = Convert.ToInt32(Console.ReadLine());
for(int i = 0; i< length; i++)
{
Console.Write("{0} ", Fibonacci(i));
}
Console.ReadKey();
}
}
}
登入後複製

2.遞迴方法

這是解決這個問題的另一種方法。

方法一

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespaceFibonacciDemo
{
classProgram
{
staticint Fibonacci(int n)
{
intfirstnumber = 0, secondnumber = 1, result = 0;
if (n == 0) return 0; //it will return the first number of the series
if (n == 1) return 1; // it will return the second number of the series
return Fibonacci(n-1) + Fibonacci(n-2);
}
staticvoid Main(string[] args)
{
Console.Write("Length of the Fibonacci Series: ");
int length = Convert.ToInt32(Console.ReadLine());
for(int i = 0; i< length; i++)
{
Console.Write("{0} ", Fibonacci(i));
}
Console.ReadKey();
}
}
}
登入後複製

方法2

using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FibonacciSeries
{
class Program
{
public static void Fibonacci
(
int firstnumber,
int secondnumber,
int count,
int length,
)
{
if (count <= length)
{
Console.Write("{0} ", firstnumber);
Fibonacci(secondnumber, firstnumber + secondnumber, count + 1, length);
}
}
public static void Main(string[] args)
{
Console.Write("Length of the Fibonacci Series: ");
int length = Convert.ToInt32(Console.ReadLine());
Fibonacci(0, 1, 1, length);
Console.ReadKey();
}
}
}
登入後複製

輸出:

C# 中的斐波那契數列

3.使用陣列的斐波那契

代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class Program
{
public static int[] Fibonacci(int number)
{
int[] a = new int[number];
a[0] = 0;
a[1] = 1;
for (int i = 2; i < number; i++)
{
a[i] = a[i - 2] + a[i - 1];
}
return a;
}
public static void Main(string[] args)
{
var b = Fibonacci(10);
foreach (var elements in b)
{
Console.WriteLine(elements);
}
}
}
登入後複製

輸出:

C# 中的斐波那契數列

如何求斐波那契數列的第N項?

方法如下

方法一

代碼:

using System;
namespace FibonacciSeries
{
class Program {
public static int NthTerm(int n)
{
if ((n == 0) || (n == 1))
{
return n;
}
else
{
return (NthTerm(n - 1) + NthTerm(n - 2));
}
}
public static void Main(string[] args)
{
Console.Write("Enter the nth term of the Fibonacci Series: ");
int number = Convert.ToInt32(Console.ReadLine());
number = number - 1;
Console.Write(NthTerm(number));
Console.ReadKey();
}
}
}
登入後複製

上面的程式碼是求斐波那契數列的第n項。例如,如果我們想要找出該系列中的第 12th 項,那麼結果將為 89。

方法2

(O(Log t) 時間)。

還有另一個遞歸公式可用來找出第 t 個斐波那契數 如果 t 是偶數則 = t/2:

F(t) = [2*F(k-1) + F(k)]*F(k)

如果 t 是奇數,則 k = (t + 1)/2

F(t) = F(k)*F(k) + F(k-1)*F(k-1)

斐波那契矩陣

求行列式後,我們將得到 (-1)t = Ft+1Ft-1 – Ft2

FmFt + Fm-1Ft-1 = Fm+t-1

透過將 t = t+1,

FmFt+1 + Fm-1Ft = Fm+t

設 m = t

F2t-1 = Ft2 + Ft-12

F2t = (Ft-1 + Ft+1)Ft = (2Ft-1 + Ft)Ft

要得到公式,我們將執行以下操作

如果 t 是偶數,則 k = t/2

如果 t 是奇數,則 k = (t+1)/2

所以透過對這些數字進行排序我們可以防止不斷使用STACK的記憶體空間。它給出的時間複雜度為 O(n)。遞歸演算法效率較低。

代碼:

int f(n) :
if( n==0 || n==1 )
return n;
else
return f(n-1) + f(n-2)
登入後複製

現在當上述演算法運行 n=4

fn(4)

f(3)             f(2)

f(2)   f(1)     f(1)   f(0)

f(1)  f(0)

所以它是一棵樹。為了計算f(4),我們需要計算f(3)和f(2)等等。對於較小的值4,f(2)計算兩次,f(1)計算三次。添加的數量將會大量增長。

有一個猜想,計算f(n)所需的加法次數為f(n+1) -1。

結論

這裡迭代方法始終是首選,因為它有更快的方法來解決此類問題。這裡我們將斐波那契數列的第一個和第二個數儲存在前一個數和前一個數中(這是兩個變數),並且我們使用當前數來儲存斐波那契數。

以上是C# 中的斐波那契數列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板