1. التفكير
مشكلة الأرنب هي بيان تصويري لسلسلة فيشر ، وهو سؤال أثير في أعماله من قبل عالم رياضيات يدعى فيبوناتشي.
2. الوصف
المشكلة في أسلوبه المادي هي: إذا كان الطفل يولد طفلًا كل شهر ، يبدأ الطفل في الولادة بعد شهر. في البداية ، لم يكن هناك طفل واحد فقط ، وكان هناك صبيان رضيعان في شهر واحد ، وثلاثة أولاد رضيع في شهرين ، وخمسة أولاد صغار في ثلاثة أشهر (تم إنتاج الطفل الصغير في الإنتاج) ...
نعبر عنها بطريقة رياضية ، وهي المجموعة التالية من التسلسلات:
1 ، 1 ، 2 ، 3 ، 5 ، 8 ، 13 ، 21 ، 34 ، 55 ، 89 ......
ملاحظة: سيستغرق الطفل الجديد شهرًا واحدًا لبدء الإنتاج! وهذه الأرانب خالدة! ! !
3. القواعد
عندما نتعرض لسبب غير مفهوم لهذه المشكلة ، من الصعب العثور على القواعد ، لكن التفكير في هذه المشكلة وفقًا لقوانين التسلسل في الرياضيات ، وانتظار المقارنة؟ اختلاف الصورة الرمزية؟ أو شيء آخر؟ نظرًا لأن هذا سؤال طرحه علماء الرياضيات ، يجب أن يكون هناك بعض القواعد الرياضية فيه ، أليس كذلك؟ ما هي القاعدة؟ إذا قمت بتحليل مجموعة التسلسلات أعلاه بعناية ، فلديك الإجابة بالفعل. هذا صحيح ، يتم التعبير عنه في جملة واحدة. بدءًا من الفترة الثالثة ، يساوي مجموع المصطلحين الأولين الفصل الثالث.
على افتراض أن قيمة المصطلح التاسع هي FN ، يتم التعبير عن انتظام التسلسل على النحو التالي باستخدام الصيغ الرياضية:
4
ما يسمى الكود الزائف ليس رمزًا حقيقيًا. لا يمكن تنفيذها على الجهاز. إنه مجرد رمز ذي معنى بين اللغة الطبيعية ولغة البرمجة التي تعبر عن منطق البرنامج. بالنسبة إلى الرمز الكاذب لمشكلة الأرنب ، نستخدم الطريقة العودية للصيغة أعلاه هنا ، ويمكننا الحصول على الكود الكاذب التالي:
الإجراء FIB (n) [إذا (n <0) طباعة ("خطأ الإدخال") ؛ if (n = 0 أو n = 1) return (n) ؛ عودة أخرى (FIB (N-1) + FIB (N-2)) ؛ ]وفقًا لمفهوم Recursion الموضح في المقالة السابقة ، يمكنك الرجوع إلى "مشكلة Hanno" السابقة للحصول على التفاصيل. بالمقارنة مع الجميع ، لن تكون غير مألوف للغاية مع العودية. بعد ذلك ، استنادًا إلى الصيغ الرياضية التي حصلنا عليها أعلاه ، فإن استنتاج مثل هذا الرمز الكاذب العودية سيكون موجزًا وواضحًا للغاية. لكن ، أم ، ربما تكون قد خمنت ذلك ، أريد أن أقول ذلك. هل وجدت مشكلة أنه عندما تكون قيمة N كبيرة جدًا ، سيكون البرنامج أبطأ؟
إذا اكتشفت ذلك ، فهذا يعني أنك فكرت في هذه المشكلة بجدية ، ويجب عليك أيضًا حل الشكوك في قلبك. إذا كان لا يزال هناك شك في حل ، اسمحوا لي أن أحل شكوك الجميع. لماذا هو أبطأ؟ والسبب هو أنه عندما نحسب المصطلح التاسع ، نحتاج إلى حساب شروط N-1 و N-2 مرة أخرى ، وتم حساب كلا المصطلحين من قبل. عندما نجد الرقم التالي ، لا يزال يتعين علينا حسابه على الجانب. بشكل غير مرئي ، لقد قمنا بالكثير من العمل عديم الفائدة.
لذا ، هل لدينا طريقة جيدة لحل هذه المشكلة؟ هناك إجابة. وفقًا للتحليل أعلاه ، عندما نحل المصطلح التاسع ، تم حل شروط N-1 و N-2 السابقة. فلماذا لا ننقذها؟ ؟ ؟ ؟
هاها ، هل أدركت ذلك فجأة؟ نعم! نستخدم مساحة لتبادل الوقت هنا ، والتي يمكن أن تحسن الكفاءة بشكل كبير! لن أكتب الكود الزائف هنا.
5. الكود
حسنًا ، لقد بعت كل شيء ، فقط قم بتحميل الرمز:
الفئة العامة fibonacci {public static void main (string [] args) {int [] fib = new int [20] ؛ fib [0] = 0 ؛ FIB [1] = 1 ؛ لـ (int i = 2 ؛ i <ib.length ؛ i ++) {fib [i] = fib [i-1]+fib [i-2] ؛ } لـ (int i = 0 ؛ i <ib.length ؛ i ++) {system.out.print (fib [i]+"") ؛ } system.out.println () ؛ }}6. التفكير
هنا ، نقترح سؤال التفكير. إذا لم يولد الأرنب أرنبًا واحدًا وأرانب متعددة ، فكيف يجب أن نحلها؟ بالطبع ، ما نعنيه من خلال الولادة المتعددة هو رقم ثابت. لن يولد أرنب واحد أكثر ولن يولد أرنب واحد أقل ، وإلا سيكون من المستحيل حلها.
لا يوجد رمز هنا. يمكنك العثور على الموارد المناسبة عبر الإنترنت ومعرفة كيفية حلها.
لخص
ما سبق هو كل محتوى هذه المقالة حول تحليل رمز لغة Java لحل مشاكل الأرنب. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها!