📄 النص الكامل للصفحة
--- SECTION: متى تستخدم الاستدعاء الذاتي؟ --- متى تستخدم الاستدعاء الذاتي؟يُعد الاستدعاء الذاتي الطريقة الأكثر ملائمة للتعامل مع المشكلة في العديد من الحالات.
يسهل استكشاف بعض هياكل البيانات باستخدام الاستدعاء الذاتي.
بعض خوارزميات التصنيف (Sorting Algorithms)، تُستخدم الاستدعاء الذاتي، مثل: التصنيف السريع (Quick Sort).في المثال التالي، ستستخرج أكبر رقم موجود في قائمة مكونة من الأرقام باستخدام دالة الاستدعاء التكرارية. كما يظهر في السطر الأخير من المثال دالة أخرى للتكرار لغرض المقارنة.def findMaxRecursion(A,n):
if n==1:
m = A[n-1]
else:
m = max(A[n-1],findMaxRecursion(A,n-1))
return m def findMaxIteration(A,n):
m = A[0]
for i in range(1,n):
m = max(m,A[i])
return mتستخرج الدالة ()max العنصر ذا القيمة الأكبر (العنصر ذو القيمة الأكبر في myList).# main program myList = [3,73,-5,42]
l = len(myList)
myMaxRecursion = findMaxRecursion(myList,l)
print("Max with recursion is: ", myMaxRecursion)
myMaxIteration = findMaxIteration(myList,l)
print("Max with iteration is: ", myMaxIteration)Max with recursion is: 73
Max with iteration is: 73شكل 2.5: شجرة الاستدعاء الذاتي لدالة استخراج أكبر رقم في قائمة مكونة من الأرقام2025 - 1447--- VISUAL CONTEXT ---
**CODE**: Python Code for Finding Maximum Number Description: A block of Python code demonstrating both recursive (`findMaxRecursion`) and iterative (`findMaxIteration`) methods to find the maximum number in a list. It includes a main program that initializes `myList = [3,73,-5,42]`, calculates its length, calls both functions, and prints their results.
Context: Provides practical examples of recursion and iteration in programming, showing how to implement them and test their functionality.**HIGHLIGHT_BOX**: وظيفة الدالة max()
Description: A pink-colored box providing a definition or explanation for the `max()` function, stating it extracts the element with the largest value, specifically referring to `myList` in this context.
Context: Clarifies the role of a built-in Python function used within the provided code examples.**TEXT_BOX**: Program Output Description: A grey-bordered box displaying the console output of the Python program, showing 'Max with recursion is: 73' and 'Max with iteration is: 73', confirming that both methods successfully identified the maximum value in the list.
Key Values: 73
Context: Presents the results of executing the code, allowing verification of the algorithms' correctness.**DIAGRAM**: شكل 2.5: شجرة الاستدعاء الذاتي لدالة استخراج أكبر رقم في قائمة مكونة من الأرقام
Description: A blue-themed tree diagram visually representing the recursive calls of the `findMaxRecursion` function. It starts with `max(A[3], findMaxRecursion(A, 3))`, which then breaks down into `42 < max(A[2], findMaxRecursion(A, 2))`. This further decomposes to `-5 < max(A[1], findMaxRecursion(A, 1))`, and finally shows the base case comparison `73 > 3`. The diagram illustrates how the maximum value is determined through a series of comparisons in the recursive call stack.
Key Values: 42, -5, 73, 3
Context: Helps to visualize the execution flow and decision-making process within a recursive function, making the concept of recursion more intuitive.
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
متى يُعد الاستدعاء الذاتي (Recursion) الطريقة الأكثر ملائمة للتعامل مع المشكلة؟
الإجابة: يُعد الاستدعاء الذاتي الطريقة الأكثر ملائمة عند التعامل مع المشكلات التي يسهل استكشاف هياكل بياناتها باستخدام هذه التقنية، أو عند تطبيق بعض خوارزميات التصنيف مثل التصنيف السريع (Quick Sort).
الشرح: الاستدعاء الذاتي مفيد بشكل خاص عندما يمكن تقسيم المشكلة إلى نسخ أصغر متطابقة من المشكلة نفسها. هياكل البيانات المتكررة والخوارزميات التي تعتمد على هذا المبدأ تستفيد بشكل كبير من الاستدعاء الذاتي.
تلميح: فكر في طبيعة المشكلات التي تتطلب تقسيمها إلى أجزاء أصغر متكررة.
اذكر مثالاً لخوارزمية تصنيف تستخدم الاستدعاء الذاتي.
الإجابة: أحد الأمثلة على خوارزميات التصنيف التي تستخدم الاستدعاء الذاتي هو التصنيف السريع (Quick Sort).
الشرح: التصنيف السريع (Quick Sort) هي خوارزمية فعالة تستخدم مبدأ "فرق تسد" (Divide and Conquer) والذي يعتمد بشكل أساسي على الاستدعاء الذاتي لتقسيم القائمة إلى أجزاء أصغر وإعادة ترتيبها.
تلميح: ابحث عن اسم خوارزمية تصنيف شائعة تعتمد على تقسيم البيانات بشكل متكرر.
في دالة `findMaxRecursion(A, n)`، ما هي الحالة الأساسية (Base Case) التي توقف الاستدعاء الذاتي؟
الإجابة: الحالة الأساسية هي عندما يكون `n` (عدد العناصر) يساوي 1. في هذه الحالة، يتم إرجاع العنصر الأخير في القائمة `A[n-1]` والذي يمثل أكبر قيمة في قائمة من عنصر واحد.
الشرح: الحالة الأساسية ضرورية في أي دالة استدعاء ذاتي لضمان انتهاء الاستدعاءات وتجنب حلقة لا نهائية. هنا، عندما يتبقى عنصر واحد فقط، فهو بالضرورة الأكبر.
تلميح: فكر في أصغر حجم ممكن للمشكلة بحيث يمكن حلها مباشرة بدون استدعاءات إضافية.
كيف تعمل الدالة `max()` في سياق العثور على أكبر رقم في قائمة Python؟
الإجابة: الدالة `max()` (في هذا السياق، غالباً ما تكون إما دالة مدمجة في Python أو جزءاً من منطق المقارنة داخل الدالة) تستخرج العنصر ذا القيمة الأكبر من بين العناصر المعطاة أو الموجودة في القائمة.
الشرح: عند استخدام `max(a, b)`، تقوم الدالة بإرجاع القيمة الأكبر بين `a` و `b`. في المثال، تُستخدم لمقارنة العنصر الحالي `A[n-1]` مع أكبر قيمة تم العثور عليها في بقية القائمة (من خلال الاستدعاء الذاتي).
تلميح: ما هو دور هذه الدالة بالنسبة للعناصر التي تقارن بينها؟
اشرح باختصار كيف توضح شجرة الاستدعاء الذاتي (شكل 2.5) عملية إيجاد أكبر رقم في القائمة `[3, 73, -5, 42]` باستخدام `findMaxRecursion`.
الإجابة: تبدأ شجرة الاستدعاء الذاتي بالمقارنة العليا، حيث يتم مقارنة العنصر الأخير (42) مع أكبر رقم في العناصر السابقة (المُحسوب بواسطة استدعاء ذاتي). تتفرع هذه العملية نزولاً، حيث يتم تقسيم المشكلة باستمرار حتى الوصول إلى الحالة الأساسية (عنصر واحد). بعد ذلك، يتم بناء الحل من الأسفل إلى الأعلى، حيث تتكشف المقارنات تدريجياً لتحديد القيمة القصوى النهائية (73).
الشرح: تُظهر الشجرة بوضوح كيف تقسم الدالة المشكلة (إيجاد أكبر رقم في قائمة) إلى مشكلات فرعية أصغر (إيجاد أكبر رقم في قائمة أقصر). في كل مستوى، تتم مقارنة عنصر مع النتيجة العائدة من الاستدعاء الذاتي، مما يؤدي في النهاية إلى تحديد أكبر قيمة.
تلميح: فكر في كيفية تقسيم المشكلة الكبيرة إلى مشكلات فرعية أصغر وكيفية تجميع الحلول.