フィボナッチ数列– Python、JavaScript、C ++、Java、およびSwiftで説明

フィボナッチ数列は、定義上、最初の2つ以降のすべての数が前の2つの数の合計である整数列です。単純化するには:

0、1、1、2、3、5、8、13、21、34、55、89、144、…

それは数学や取引でさえ多くのアプリケーションを持っています(そうです、あなたはその権利を読んでいます:取引)、しかしそれはこの記事のポイントではありません。今日の私の目標は、再帰関数を使用して、この一連の数値の任意の項を5つの異なるプログラミング言語で計算する方法を示すことです。

再帰関数は、基本的に自分自身を呼び出す関数です。

これは最善の方法ではないことに注意してください。実際、この目的のための最も基本的な方法と見なすことができます。これは、級数のより大きな項を計算するために必要な計算能力が莫大であるためです。関数が呼び出された回数は、ほとんどの言語でスタックオーバーフローを引き起こします。

それでも、このチュートリアルの目的のために、始めましょう。

まず、コードがどのようになるかを考えてみましょう。含まれるもの:

・再帰関数F(フィボナッチの場合はF):次の項の値を計算します。

・他に何もありません:それは非常に基本的なことだと警告しました。

関数はnを入力として受け取ります。これは、計算するシーケンスのn番目の項を参照します。したがって、F(4)はシーケンスの第4項を返す必要があります。

計画しましょう。言語に関係なく、コードは次のようになります。

function F(n)  if n = 0

   return 0  if n = 1

   return 1  else

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

注:シーケンスの項0は0と見なされるため、最初の項は1になります。2番目、1; 3番目、2; 等々。あなたはそれを得る。

関数を少し分析してみましょう。入力として0を取得すると、0を返します。1を取得すると、1を返します。2を取得すると…まあ、その場合、elseステートメントに分類され、項2–1( 1)および2–2(0)。これにより、1と0が返され、2つの結果が加算されて、1が返されます。

これで、再帰関数が問題になる場合がある理由がわかります。シーケンスの100番目の項が必要だと想像してください。関数は99番目と98番目を呼び出し、98番目と97番目、97番目と96番目の用語などを呼び出します。それは本当に遅いでしょう。

しかし、良いニュースは、それが実際に機能することです!

それでは、さまざまな言語から始めましょう。私はあなたの読書体験をより良くするためにあまり詳細を与えません(実際には、詳細はまったくありません)。とにかく詳細にすることはあまりありません。

それに飛び込みましょう:

Python

def F(n):  if n == 0:

   return 0  if n == 1:

   return 1  else:

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

迅速

func F(_ n: Int) -> Int {  if n == 0 {    return 0

 }  if n == 1 {    return 1

 }  else {    return F(n-1) + F(n-2)

 }}

JavaScript

function F(n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

Java

public static int F(int n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

C ++

int F(int n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

以上です。私は人気に基づいてこれらの言語を選択しました—または少なくともこれらの5つが私が使用する最も一般的な言語であるため、それらは特定の順序ではありません。私の意見では、構文の難しさによって、Python(最も簡単)からC ++(最も難しい)に分類できます。しかし、それはあなたの個人的な意見と各言語でのあなたの経験に依存します。

この記事が気に入っていただければ幸いです。質問や推奨事項がある場合、または単に挨拶したい場合は、以下にコメントしてください。