ホームページ  >  記事  >  バックエンド開発  >  C# のフィボナッチ数列

C# のフィボナッチ数列

王林
王林オリジナル
2024-09-03 15:34:44762ブラウズ

フィボナッチ数列のC#におけるフィボナッチ数列は有名な数列の一つです。シーケンスは 0、1、1、2、3、5、8... です。フィボナッチ数列は 0 と 1 から始まり、次の数値は前の 2 つの数値の合計になります。フィボナッチ数列は13世紀にレオナルド・ピサーノ・ビゴッロ氏によって作成されたと言われています。フィボナッチ数列は、いくつかのシナリオで役立ちます。基本的に、それはもともとウサギの問題、つまりつがいから生まれるウサギの数を解くために使用されました。フィボナッチ数列が役立つ問題は他にもあります。

フィボナッチ級数ロジック

フィボナッチ数列と同様、この数値は先行する 2 つの数値の合計です。したがって、フィボナッチ数列がある場合、0、1、1、2、3、5、8、13、21... この数字によれば、次の数字は 13 と 21 のように、前の 2 つの数字の合計になります。つまり、次の数字は 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.再帰的メソッド

これは、この問題を解決する別の方法です。

方法 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
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. Array

を使用したフィボナッチ

コード:

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 項を見つける方法は?

以下の方法があります

方法 1

コード:

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 番目の項を見つけることです。たとえば、シリーズ内の 12 番目 の用語を見つけたい場合、結果は 89 になります。

方法 2

(O(ログ t) 時間).

t 番目のフィボナッチ数を見つけるために使用できるもう 1 つの漸化式があります。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) は 2 回計算され、f(1) は 3 回計算されます。この加算数は、数値が大きいほど大きくなります。

f (n) の計算に必要な加算回数は f (n+1) -1 であるという予想があります。

結論

ここでは、この種の問題をより迅速に解決できるため、反復法が常に好まれます。ここでは、フィボナッチ数列の最初と 2 番目の数値を前の数値と前の数値 (これらは 2 つの変数) に保存し、また現在の数値を使用してフィボナッチ数を保存しています。

以上がC# のフィボナッチ数列の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:C# の階乗次の記事:C# の階乗