Saud | سعود الانصاري
Saud | سعود الانصاري

@Alansaricodez

14 تغريدة 15 قراءة Feb 21, 2022
❗️ثريدات مهمة لطلبة تقنية المعلومات وعلوم الحاسب❗️
موضوع اليوم: Recursion
وهي العملية التي تستدعي فيها الدالّة نفسها بشكل مباشر أو غير مباشر بالعودية وتسمى الدالّة المقابلة باسم بالدالة العودية
فكرة استخدامه كانت معقدة لي في بداية تعلمها في الجامعة، لذلك انصحك في البحث عنها اكثر بعد قراءة هذا الثريد
هيا بنا نبدأ👇
♦️كيف يتم حل مشكلة معينة باستخدام Recursion؟
الفكرة هي تمثيل مشكلة ما وتقسيمها الى مشكلة واحدة أو أكثر، وإضافة شرط أساسي واحد أو أكثر لإيقافها
على سبيل المثال:
نحسب مضروب n إذا عرفنا مضروب (n-1)، الحالة الأساسية للمضروب هي n = 0، نعيد 1 عندما n = 0
باستخدامها، يمكن حل بعض المشاكل بسهولة تامة
♦️ أمثلة على هذه المشكلات هي:
- Towers of Hanoi (TOH)
- Inorder / Preorder / Postorder Tree Traversals
- DFS للرسم البياني
وما إلى ذلك
♦️لكن ما هو الفرق بين Recursion المباشر وغير المباشر؟
تسمى الدالة بدالة recursion المباشر إذا كانت تستدعي نفس الدالة داخلها
لكنها تكون غير مباشرة إذا استدعت دالة أخرى تستدعي الدالة الاساسية بشكل مباشر أو غير مباشر داخلها
الفرق بين العودية المباشرة وغير المباشرة
♦️مثال لمشكلة يحلها Recursion:
اكتب برنامجًا وعلاقة تكرار لإيجاد سلسلة فيبوناتشي لـ n حيث n> 2
وايضا طريقة حسابها باستخدام عملية recursion
واذا تريد رؤية كود فعلي لهذه العملية، اليك طريقتها بلغة javaScript:
سيكون الناتج من الكود:
Fibonacci series of 5 numbers is: 0 1 1 2 3
♦️مثال اخر:
من السهل جمع عددين معًا، لكن إضافة نطاق من الأرقام أكثر تعقيدًا
في المثال التالي، يتم استخدام recursion لإضافة نطاق من الأرقام معًا عن طريق تقسيمها إلى مهمة بسيطة تتمثل في إضافة رقمين:
عندما يتم استدعاء دالّة sum ()، فإنها تضيف k إلى مجموع جميع الأرقام الأصغر من k وتعيد النتيجة
عندما تصبح k = 0 ، ترجع الدالة 0 فقط، ونظرًا لأن الدالّة لا تستدعي نفسها عندما تكون k تساوي 0، يتوقف البرنامج عند هذا الحد ويعيد النتيجة
♦️حالة التوقف Halting Condition:
مثلما يمكن أن تصطدم الحلقات بمشكلة التكرار اللانهائي، يمكن أن تواجه الدالّلات مشكلة resursion اللانهائي
وهي عندما لا تتوقف الدالّة أبدا عن استدعاء نفسها، يجب أن يكون لكل دالة تكرارية حالة توقف، وهي الحالة التي تتوقف فيها الوظيفة عن استدعاء نفسها
♦️عيوبه:
- يستهلك مساحة المكدس، ينتج عن كل استدعاء للطريقة مثيل جديد للطريقة، مثيل به مجموعة جديدة من المتغيرات المحلية
تعتمد مساحة المكدس الإجمالية المستخدمة على مستوى تداخل عملية العودية وعدد المتغيرات والمعلمات المحلية.
- قد تؤدي recursion الى حسابات زائدة عن الحاجة، ضع في اعتبارك الحساب التكراري لتسلسل فيبوناتشي
باختصار، يتعين على المرء أن يوازن بين بساطة الكود الذي يتم تسليمه عن طريق recursion مقابل عيوبه
عندما يكون من الممكن إيجاد حل تكراري بسيط نسبيًا، فمن المؤكد أنه بديل أفضل
هل تعلمت شيء جديد؟ لا تنس اعادة التغريد حتى يستفيد الجميع🙏

جاري تحميل الاقتراحات...