دالة الاستدعاء التكرارية اللانهائية - كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: دالة الاستدعاء التكرارية اللانهائية Infinite Recursive Function

📚 معلومات الصفحة

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: درس تعليمي

مستوى الصعوبة: متوسط

📝 ملخص الصفحة

تقدم هذه الصفحة شرحًا لدالة الاستدعاء التكرارية لحساب مضاعف الرقم (الأس) في البرمجة باستخدام لغة Python. تبدأ بمثال عملي يوضح كيفية إنشاء دالة استدعاء تكرارية تسمى `powerFunRecursive` لحساب القوة، حيث تقبل رقمًا أساسيًا وأسًا، وتستخدم التكرار لحساب النتيجة. كما تقدم الصفحة بديلاً باستخدام التكرار عبر دالة `powerFunIteration` لإظهار كيفية تحقيق نفس الهدف بطرق مختلفة.

يتضمن النص برنامجًا رئيسيًا يطلب من المستخدم إدخال الأساس والأس، ثم يحسب النتيجة باستخدام كل من الاستدعاء التكرارية والتكرار، مع عرض النتائج للمقارنة. مثال تشغيلي يوضح إدخال الأساس 10 والأس 3، مما ينتج 1000 في كلا الطريقتين.

تختتم الصفحة بتحذير حول دالة الاستدعاء التكرارية اللانهائية، مشيرة إلى أهمية وضع شرط إيقاف لتجنب التكرار اللانهائي الذي قد يؤدي إلى فيض الذاك Memory Overflow وتوقف النظام. هذا القسم يسلط الضوء على المخاطر المرتبطة بالاستدعاء التكراري غير المنضبط وأهمية التصميم الآمن في البرمجة.

📄 النص الكامل للصفحة

في البرنامج التالي، ستُنشئ دالة استدعاء تكرارية لحساب مضاعف الرقم. ستقوم بإدخال رقمًا (الأساس) وفهرسًا (الأس أو القوة) يقبلهما البرنامج، ومن ثم ستُستخدم دالة الاستدعاء التكرارية () powerFunRecursive التي ستُستخدم هذين المدخلين لحساب مضاعف الرقم. يمكن تحقيق الأمر نفسه باستخدام التكرار، والمثال التالي يوضح ذلك: def powerFunRecursive(baseNum,expNum): if(expNum==1): return(baseNum) else: return(baseNum*powerFunRecursive(baseNum,expNum-1)) def powerFunIteration(baseNum,expNum): numPower = 1 for i in range(exp): numPower = numPower*base return numPower # main program base = int(input("Enter number: ")) exp = int(input("Enter exponent: ")) numPowerRecursion = powerFunRecursive(base,exp) print("Recursion: ", base, " raised to ", exp, " = ",numPowerRecursion) numPowerIteration = powerFunIteration(base,exp) print("Iteration: ", base, " raised to ", exp, " = ",numPowerIteration) Enter number: 10 Enter exponent: 3 Recursion: 10 raised to 3 = 1000 Iteration: 10 raised to 3 = 1000 --- SECTION: دالة الاستدعاء التكرارية اللانهائية Infinite Recursive Function --- دالة الاستدعاء التكرارية اللانهائية Infinite Recursive Function يجب أن تكون حذرًا للغاية عند تنفيذ الاستدعاء التكراري، كما يجب عليك استخدام طريقة معينة لإيقاف التكرار عند تحقيق شرط محدد لتجنب حدوث الاستدعاء التكراري اللانهائي، الذي يسبب توقف النظام عن الاستجابة بسبب كثرة استدعاءات الدالة، مما يؤدي إلى فيض الذاكرة (Memory Overflow) وإنهاء التطبيق. وزارة التعليم Ministry of Education 2023 - 1447 76

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 4 بطاقة لهذه الصفحة

ما هو الغرض الرئيسي من دالة `powerFunRecursive` في المثال المقدم؟

الإجابة: الغرض الرئيسي من دالة `powerFunRecursive` هو حساب مضاعف (قوة) رقم معين باستخدام طريقة الاستدعاء التكراري.

الشرح: تقوم الدالة `powerFunRecursive` بأخذ الرقم الأساسي (`baseNum`) والأس (`expNum`)، وفي كل استدعاء تكراري، تقوم بضرب الرقم الأساسي بنفسه، مقللة الأس بمقدار واحد، حتى يصل الأس إلى 1.

تلميح: فكر في العملية الحسابية التي تقوم بها الدالة وما هي المدخلات التي تعالجها.

كيف تعمل دالة `powerFunIteration` لحساب مضاعف الرقم؟

الإجابة: تعمل دالة `powerFunIteration` باستخدام حلقة تكرار (for loop) تبدأ من 1 حتى قيمة الأس (`expNum`)، وتقوم بضرب متغير `numPower` (الذي يبدأ بقيمة 1) بالرقم الأساسي (`baseNum`) في كل دورة من دورات الحلقة.

الشرح: هذه الدالة تستخدم طريقة تكرارية بسيطة. تبدأ بنتيجة 1، ثم تضربها بالأساس لعدد مرات يساوي الأس، مما ينتج عنه نفس نتيجة المضاعف.

تلميح: تذكر أن هذا النهج يستخدم طريقة مختلفة عن الاستدعاء التكراري، ما هي الآلية الأساسية في هذا النهج؟

ما هو الخطر الرئيسي عند استخدام الاستدعاء التكراري (Recursion) بدون شرط توقف محدد؟

الإجابة: الخطر الرئيسي هو حدوث الاستدعاء التكراري اللانهائي (Infinite Recursive Function)، مما يؤدي إلى فيض الذاكرة (Memory Overflow) وتوقف النظام عن الاستجابة وإنهاء التطبيق.

الشرح: الاستدعاء التكراري اللانهائي يعني أن الدالة تستمر في استدعاء نفسها دون الوصول إلى شرط الإنهاء، مما يستهلك كل الذاكرة المتاحة ويؤدي إلى انهيار البرنامج.

تلميح: تخيل أن دالة تستدعي نفسها بلا نهاية، ما هو التأثير الفوري على موارد الكمبيوتر؟

لماذا يعتبر وجود شرط التوقف (Base Case) في دوال الاستدعاء التكراري أمراً ضرورياً؟

الإجابة: شرط التوقف ضروري لإنهاء سلسلة الاستدعاءات التكرارية ومنع حدوث الاستدعاء التكراري اللانهائي. بدون شرط توقف، لن تتوقف الدالة عن استدعاء نفسها.

الشرح: في المثال، شرط التوقف هو `if(expNum==1): return(baseNum)`. عندما يصل الأس إلى 1، تتوقف الدالة عن الاستدعاء التكراري وتعيد القيمة الأساسية، مما يسمح بتكوين سلسلة النتائج.

تلميح: ما هي النقطة التي يجب أن تتوقف عندها الدالة لكي لا تستمر إلى ما لا نهاية؟