0 تصويتات
في تصنيف البرمجة بواسطة admin6 (333ألف نقاط)

1 إجابة واحدة

0 تصويتات
بواسطة admin6 (333ألف نقاط)

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

بمعنى بسيط: تستخدم Recursion عندما تكون المشكلة متكررة بطبيعتها ويمكن التعبير عنها بشكل أنيق باستخدام دالة تستدعي نفسها.


متى يجب استخدام Recursion؟

1. عند وجود بنية متكررة (Recursive Structure)

  • مثل:
    • الأشجار (Trees)
    • القوائم المرتبطة (Linked Lists)
  • هذه الهياكل تحتوي على عناصر داخل عناصر، لذلك Recursion تكون مناسبة جدًا للتعامل معها.

مثال:
التنقل داخل شجرة (Tree Traversal) يكون أسهل باستخدام Recursion.


2. عند تقسيم المشكلة إلى أجزاء أصغر

  • إذا كانت المشكلة يمكن تقسيمها إلى نفس المشكلة ولكن بحجم أصغر.
  • مثل:
    • حساب العامل (Factorial)
    • البحث الثنائي (Binary Search)
    • خوارزميات مثل Merge Sort وQuick Sort

3. عند وجود نمط متكرر واضح

  • إذا لاحظت أن الحل يحتوي على تكرار طبيعي، فغالبًا Recursion ستكون خيارًا مناسبًا.
  • مثال:
    • متتالية فيبوناتشي
    • حل الألغاز مثل Tower of Hanoi

4. عندما يكون الكود أبسط باستخدام Recursion

  • أحيانًا Recursion تجعل الكود:
    • أقصر
    • أوضح
    • أسهل للفهم

لكن هذا لا يعني أنها دائمًا الأفضل من حيث الأداء.


متى لا تستخدم Recursion؟

  • إذا كانت تؤدي إلى استهلاك كبير للذاكرة (Stack Overflow).
  • إذا كان يمكن حل المشكلة بسهولة باستخدام Loops (for / while) بشكل أكثر كفاءة.
  • في الحالات التي تتطلب أداء عالي جدًا بدون استهلاك إضافي للذاكرة.

شروط استخدام Recursion بشكل صحيح

لكي تعمل Recursion بشكل صحيح، يجب أن تحتوي على:

  1. Base Case (الحالة الأساسية):
    توقف الاستدعاء عندها (مثل n = 0).
  2. Recursive Case (الحالة التكرارية):
    الدالة تستدعي نفسها مع مشكلة أصغر.

مثال بسيط

حساب العامل (Factorial):

def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)

مما سبق نستنتج

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

...