📄 النص الكامل للصفحة
--- SECTION: الآن احسب مضروب العدد باستخدام دالة المضروب. --- الآن احسب مضروب العدد باستخدام دالة المضروب.--- SECTION: جدول 2.2: مزايا الاستدعاء الذاتي وعيوبه --- جدول 2.2: مزايا الاستدعاء الذاتي وعيوبه--- SECTION: الاستدعاء الذاتي والتكرار Recursion and Iteration --- الاستدعاء الذاتي والتكرار Recursion and Iterationيُستخدم كل من الاستدعاء الذاتي والتكرار في تنفيذ مجموعة من التعليمات لعدة مرات، والفارق الرئيس بين الاستدعاء الذاتي والتكرار هو طريقة إنهاء الدالة التكرارية. دالة الاستدعاء التكرارية تستدعي نفسها وتنتهي التنفيذ عندما تصل إلى الحالة الأساسية. أما التكرار فيُنفذ لبنة المقطع البرمجي باستمرار حتى يتحقق شرط محدد أو ينقضي عدد محدد من التكرارات.
الجدول التالي يعرض بعض الاختلافات بين الاستدعاء الذاتي والتكرار.--- SECTION: جدول 2.3: التكرار والاستدعاء الذاتي --- جدول 2.3: التكرار والاستدعاء الذاتي2025 - 1447--- VISUAL CONTEXT ---
**DIAGRAM**: دالة المضروب التكرارية
Description: A Python code snippet demonstrating a recursive factorial function. It includes comments, function definition, conditional logic for base and recursive cases, and a main program to get user input and print the result. An arrow points to 'الحالة الأساسية.' (Base case) for the `if x == 0: return 1` statement. Another arrow points to 'حالة الاستدعاء التكرارية.' (Recursive call case) for the `else: return (x * factorial(x-1))` statement. The output of the program for an input of 3 is also shown.
Data: N/A Key Values: # calculate the factorial of an integer using a, # recursive function, def factorial(x):, if x == 0:, return 1, else:, return (x * factorial(x-1)), # main program, num = int(input("Type a number: ")), f=factorial(num), print("The factorial of ", num, " is: ", f), Type a number: 3, The factorial of 3 is: 6, الحالة الأساسية., حالة الاستدعاء التكرارية.
Context: Illustrates the implementation of recursion in programming to calculate the factorial of a number, highlighting the base case and the recursive step with visual annotations.**DIAGRAM**: شكل 2.4: شجرة الاستدعاء الذاتي
Description: A tree diagram illustrating the recursive calls for calculating 3! (factorial of 3). It starts with 'مضروب (3)' (factorial (3)), which calls 'مضروب (2)' (factorial (2)) multiplied by 3. 'مضروب (2)' calls 'مضروب (1)' (factorial (1)) multiplied by 2. 'مضروب (1)' calls 'مضروب (0)' (factorial (0)) multiplied by 1. The base case 'مضروب (0)' returns 1. The results propagate back up the tree: 1 * 1 = 1, then 2 * 1 = 2, then 3 * 2 = 6. The final result '3! = 3*2*1 = 6' is shown at the bottom.
Data: N/A Key Values: مضروب (3), 3 * مضروب (2), 2 * مضروب (1), 1 * مضروب (0), 1, 3! = 3*2*1 = 6
Context: Visually explains how a recursive function breaks down a problem into smaller sub-problems until a base case is reached, and then combines the results to solve the original problem.**TABLE**: جدول 2.2: مزايا الاستدعاء الذاتي وعيوبه
Description: A table comparing the advantages and disadvantages of recursion.
Table Structure:
Headers: المزايا | العيوب
Rows:
Row 1: تقلل دوال الاستدعاء التكرارية من عدد التعليمات في المقطع البرمجي. | في بعض الأحيان، يصعب تتبع منطق دوال الاستدعاء التكرارية.
Row 2: يمكن تقسيم المهمة إلى مجموعة من المشكلات الفرعية باستخدام الاستدعاء الذاتي. | يتطلب الاستدعاء الذاتي مزيدًا من الذاكرة والوقت.
Row 3: في بعض الأحيان، يسهل استخدام الاستدعاء الذاتي لاستبدال التكرارات المتداخلة. | لا يسهل تحديد الحالات التي يمكن فيها استخدام دوال الاستدعاء التكرارية.
Calculation needed: N/A Data: N/A Context: Provides a structured comparison of the pros and cons of using recursion in programming.**TABLE**: جدول 2.3: التكرار والاستدعاء الذاتي
Description: A table comparing iteration and recursion based on execution speed, memory usage, code size, and termination conditions.
Table Structure:
Headers: التكرار | الاستدعاء الذاتي
Rows:
Row 1: سريع التنفيذ. | بطيء التنفيذ مقارنة بالتكرار.
Row 2: يتطلب حجم ذاكرة أقل. | يتطلب حجم ذاكرة أكبر.
Row 3: حجم المقطع البرمجي أكبر. | حجم المقطع البرمجي أصغر.
Row 4: ينتهي باستكمال العدد المحدد من التكرارات أو تحقيق شرط معين. | ينتهي بمجرد الوصول إلى الحالة الأساسية.
Calculation needed: N/A Data: N/A Context: Highlights the key differences between iterative and recursive approaches to problem-solving in programming.
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
ما هو الفرق الرئيسي بين الاستدعاء الذاتي والتكرار في إنهاء مجموعة من التعليمات؟
الإجابة: الفارق الرئيسي هو طريقة إنهاء الدالة التكرارية. دالة الاستدعاء التكرارية تستدعي نفسها وتنتهي عندما تصل إلى الحالة الأساسية، بينما التكرار يُنفذ لبنة المقطع البرمجي باستمرار حتى يتحقق شرط محدد أو ينقضي عدد محدد من التكرارات.
الشرح: توضح الإجابة آلية توقف كل من الاستدعاء الذاتي (بالوصول للحالة الأساسية) والتكرار (بالتحقق من شرط التوقف).
تلميح: فكر في الشرط الذي يوقف عمل كل من الطريقتين.
في الاستدعاء الذاتي، ما هي "الحالة الأساسية"؟
الإجابة: الحالة الأساسية هي الشرط الذي عند الوصول إليه، تتوقف الدالة التكرارية عن استدعاء نفسها وتُعيد قيمة محددة.
الشرح: الحالة الأساسية ضرورية لمنع الاستدعاء الذاتي اللانهائي، وهي نقطة النهاية التي تبدأ منها القيم بالرجوع.
تلميح: ما هو الغرض من وجود حالة أساسية في الدوال التكرارية؟
عند حساب مضروب العدد 3 (3!) باستخدام الاستدعاء الذاتي، ما هي سلسلة الاستدعاءات التي ستحدث؟
الإجابة: سلسلة الاستدعاءات هي: مضروب (3) يستدعي مضروب (2)، مضروب (2) يستدعي مضروب (1)، مضروب (1) يستدعي مضروب (0).
الشرح: هذه السلسلة توضح كيف تتجه المشكلة نحو الحل عن طريق تقسيمها إلى مشاكل فرعية أصغر حتى الوصول للحالة الأساسية (مضروب 0).
تلميح: تذكر أن الدالة تستدعي نفسها مع قيمة أقل حتى تصل إلى الحالة الأساسية.
قارن بين الاستدعاء الذاتي والتكرار من حيث سرعة التنفيذ واستهلاك الذاكرة.
الإجابة: التكرار أسرع في التنفيذ ويتطلب حجم ذاكرة أقل مقارنة بالاستدعاء الذاتي الذي يكون أبطأ ويحتاج حجم ذاكرة أكبر.
الشرح: الاستدعاءات المتكررة للدوال تستهلك وقتاً إضافياً في إدارة المكدس (stack) وتخزين معلومات الاستدعاء، مما يجعل التكرار أكثر كفاءة في هذه الجوانب.
تلميح: فكر في العمليات الإضافية التي تحدث عند كل استدعاء دالة.
ما هي إحدى عيوب الاستدعاء الذاتي التي قد تجعل تتبعه صعبًا؟
الإجابة: في بعض الأحيان، يصعب تتبع منطق دوال الاستدعاء الذاتي.
الشرح: تعقيد تتبع الاستدعاءات المتعددة والتداخل بينها يمكن أن يجعل فهم تدفق البرنامج صعبًا مقارنة بالتكرار الذي يكون مساره خطيًا بشكل عام.
تلميح: ما الذي يجعل تتبع مسار تنفيذ الكود أكثر تعقيدًا في الاستدعاء الذاتي؟