📄 النص الكامل للصفحة
في البرنامج التالي، ستُنشئ دالة استدعاء تكرارية لحساب مضاعف الرقم. ستقوم بإدخال رقمًا (الأساس) وفهرسًا (الأس أو القوة) يقبلهما البرنامج، ومن ثم ستُستخدم دالة الاستدعاء التكرارية () 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، تتوقف الدالة عن الاستدعاء التكراري وتعيد القيمة الأساسية، مما يسمح بتكوين سلسلة النتائج.
تلميح: ما هي النقطة التي يجب أن تتوقف عندها الدالة لكي لا تستمر إلى ما لا نهاية؟