تسلسل Fibonacci - موضح في Python و JavaScript و C ++ و Java و Swift

تسلسل فيبوناتشي ، بحكم التعريف ، هو تسلسل عدد صحيح يكون فيه كل رقم بعد الأولين هو مجموع العددين السابقين. للتبسيط:

0 ، 1 ، 1 ، 2 ، 3 ، 5 ، 8 ، 13 ، 21 ، 34 ، 55 ، 89 ، 144 ، ...

لديها العديد من التطبيقات في الرياضيات وحتى التداول (نعم ، لقد قرأت هذا بشكل صحيح: التداول) ، لكن هذا ليس الهدف من هذه المقالة. هدفي اليوم هو أن أوضح لك كيف يمكنك حساب أي مصطلح من هذه السلسلة من الأرقام في خمس لغات برمجة مختلفة باستخدام وظائف تكرارية.

الوظائف العودية هي تلك الوظائف التي تسمي نفسها بشكل أساسي.

أريد أن أشير إلى أن هذه ليست أفضل طريقة للقيام بذلك - في الواقع ، يمكن اعتبارها الطريقة الأساسية لهذا الغرض. وذلك لأن القوة الحاسوبية المطلوبة لحساب المصطلحات الأكبر للسلسلة هائلة. عدد المرات التي يتم فيها استدعاء الوظيفة يؤدي إلى تجاوز سعة مكدس في معظم اللغات.

مع ذلك ، لأغراض هذا البرنامج التعليمي ، لنبدأ.

بادئ ذي بدء ، دعنا نفكر في الشكل الذي ستبدو عليه الشفرة. سوف تشمل:

· دالة عودية F (F لـ Fibonacci): لحساب قيمة المصطلح التالي.

· لا شيء آخر: لقد حذرتك من أنه أمر أساسي تمامًا.

ستأخذ الدالة n كمدخل ، والذي سيشير إلى الحد n من المتسلسلة التي نريد حسابها. لذلك ، يجب أن تعيد F (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 ؛ الثاني ، 1 ؛ الثالث 2 ؛ وهلم جرا. حصلت عليه.

دعنا نحلل الوظيفة للحظة. إذا حصل على 0 كمدخل ، فإنه يعيد 0. إذا حصل على 1 ، فإنه يعيد 1. إذا حصل على 2 ... حسنًا ، في هذه الحالة يقع في عبارة else ، والتي ستستدعي الدالة مرة أخرى للمصطلحات 2-1 ( 1) و2-2 (0). سيؤدي ذلك إلى إرجاع 1 و 0 ، وستتم إضافة النتيجتين ، مع إرجاع 1. مثالي.

يمكنك الآن معرفة سبب كون الوظائف العودية مشكلة في بعض الحالات. تخيل أنك أردت الحد 100 من المتتالية. تستدعي الوظيفة نفسها من أجل 99 و 98 ، والتي من شأنها أن تستدعي الوظيفة مرة أخرى للمصطلحين 98 و 97 و 97 و 96 ... وهكذا. سيكون حقا بطيئا.

لكن الخبر السار هو أنه يعمل بالفعل!

لنبدأ باللغات المختلفة. لن أقدم الكثير من التفاصيل (في الواقع ، لا توجد تفاصيل على الإطلاق) لجعل تجربة القراءة أفضل. ليس هناك الكثير من التفاصيل على أي حال.

دعنا ننتقل إليه:

بايثون

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)

 }}

جافا سكريبت

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

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

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

 }}

جافا

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);

 }}

وهذا كل شيء. اخترت هذه اللغات بناءً على الشعبية فقط - أو على الأقل لأن هذه اللغات الخمس هي الأكثر شيوعًا التي أستخدمها ، فهي ليست بترتيب معين. يمكن تصنيفها حسب صعوبة بناء الجملة ، في رأيي ، من Python (الأسهل) إلى C ++ (الأصعب). لكن هذا يعتمد على رأيك الشخصي وتجربتك مع كل لغة.

أتمنى أن تكون قد أحببت هذه المقالة ، وإذا كان لديك أي أسئلة / توصيات أو تريد فقط أن تقول مرحبًا ، فقم بالتعليق أدناه!