|
آسف على التأخر بس كنت مشغول شوي ..
بداية نستطيع التفكير بالتوابع العودية على أنّها حلقة محكومة بشرط معيّن ، أي ممكن أن نعتبرها مثل حلقة الـ while فمثلاً إذا أردنا كتابة برنامج يعطي عاملي عدد نستطيع أن نكتب :
while i<>0 do
begin
n:=n*i
i:=i-1
end
حيث i هو العدد الذي نبحث عن العاملي الخاص به .
و لكن إذا أردنا الكتابة عوديّاً فإنّنا نكتبه :
function fact(number:integer):inte
var i:integer
begin
if (number=0 ) then
i:=1
else
i:= number*fact(number-1)k
fact:=i
end
هذه الطريقة في الكتابة في العودية هي طريقة ضروريّة لكي يكون لدينا بنيّة التابع العودي أي أنّنا إذا أهملنا الشرط فإنّنا لن نحصل على الناتج الصحيح ...
و مفهوم العوديّة يعتمد 100 % على بنية المكدّس حيث سوف يتم حفظ القيم التي تأخذها المتحولات في هذه البنية و الفكرة الرئيسيّة في هذه البنية هي : first in last out أي أنّ المتحوّل الذي يدخل في البداية سوف يكون هو ناتج الخرج النهائي و لنشرح ذلك على المثال السابق :
و ليكن العدد الذي نريد الحصول على العاملي الخاص به هو 2 و بالتالي في المرّة الأولى سوف يكون دخل التابع هو 2 و بالتالي لن يدخل إلى الـ if و لكن إلى الـ else و سوف تصبح قيمة i في هذا التابع( الخطوة 1) هي :
i:= 2*fact(2-1
و هنا سوف يكون الاستدعاء الثاني للتابع من أجل القيمة 1 و أيضاً لن يدخل إلى الـ if و لكن إلى الـ else و بالتالي سوف تصبح قيمة الـ i بالنسبة إلى هذا الاستدعاء (الخطوة2) هي :
i:= 1*fact(1-1
و هنا سوف يكون الاستدعاء الأخير للتابع و سوف يدخل إلى الـ if و تصبح قيمة (الخطوة 3) الـ i :
i:=1
و نلاحظ و جود التعليمة في نهاية التابع : fact:=i و بالتالي فإنّ أي قيمة تأخذها i سوف تسند إلى التابع fact ...
و بما أنّنا قلنا أن العودي يعتمد على بنية المكدّس فسوف يتم تعويض القيم التي حصلت عليها i و بشكل عكسي حتّى نصل إلى أوّل قيمة أخذتها الـ I من ثمّ سوف تسند هذه القيمة إلى التابع FACT عبر التعليمة الموضّحة سابقاً و من ثمّ يتم طباعة قيمة التابع و يتم ذلك بالشكل التالي :
سوف تعوّض فيمة FACT:=1 و التي حصلنا عليها في الخطوة 3 بالمعادلة الموجودة في الخطوة رقم 2 و بالتالي سوف تصبح قيمة الـ
I:=1*1 و هذه القيمة التي سوف تسند بدورها إلى التابع FACT و ذلك بفعل التعليمة الموضّحة سابقاً فتصبح بذلك فيمة التابع FACT:=1 تعوّض هذه القيمة في المعادلة الموجودة في الرقم 1 و بالتالي سوف تأخذ I القيمة
I:=2*1 و هذه القيمة سوف تسند بدورها إلى التابع FACT و على اعتبار أنّ الخطوة رقم 1 كانت هي الخطوة الأخيرة ( الأولى في الدخل و لكن الأخيرة في الخرج على اعتبار أنّ التوابع العوديّة تعتمد على بنية المكدّس ) فسوف يحافظ التابع على هذه القيمة و عند القيام بطباعة هذه القيمة في جسم البرنامج الرئيسي سوف يظهر على الشاشة الرقم 2 و هو عاملي العدد 2 الذي قمنا بإدخاله إلى التابع ...
logic will get you from a to b
but
imagenation will take you everywhere
** albert anishtine **
|