ما هو الذيل العودية؟

في برمجة الكمبيوتر ، يمثل تكرار العودية استخدام استدعاء الذيل لإجراء وظيفة عودية. استدعاء الذيل هو عندما يتم استدعاء وظيفة كعمل آخر لوظيفة أخرى. على سبيل المثال ، في برنامج JavaScript هذا:

 var myTailFunc = function (myVar) {return myVar؛ }؛ var myFunc = function (myVar) {return myTailFunc (myVar)؛ }؛ 

هنا ، الدعوة إلى myTailFunc (myVar) هي مكالمة خلفية لأنها العملية الأخيرة لـ myFunc (myVar) . عندما يرى المترجم أن هذه هي العملية النهائية لـ myFunc ، فإنه يمكن إجراء تحسين بسيط. بشكل أساسي ، لا يحتاج إلى دفع عنوان المرسل إلى المكدس ، لأنه لن يحتاج إلى العودة إلى myFunc . يمكن إرجاع قيمة الإرجاع myTailFunc كقيمة الإرجاع myFunc .

يصبح هذا التحسين الصغير أكثر أهمية عند استخدامه في دالة متكررة. عادة ، سيتطلب كل مستوى من العودية عنوان إرجاع إضافي ليتم دفعه إلى المكدس. ذيل العودية يجعل هذا غير ضروري.

فيما يلي مثال لدالة JavaScript بسيطة موضعية تُكتب أولاً بدون ، ثم ، مع تكرار ذيل.

وظيفة عامل دون العودية الذيل

 var factorial = function (n) {if (n == 0) {return 1؛ } {{} n return factorial (n - 1)؛ }} ؛ 

هذه الوظيفة تكرارية ، لكنها غير متكررة. العملية الأخيرة للدالة هي عملية الضرب (" * ") ، لذلك ستحتاج العودية دائمًا للعودة إلى وظيفة الاستدعاء.

وظيفة مع عامل العودية الذيل

 var factorial = function (n) {var recursion = function (n، subTotal) {if (n == 0) {return subTotal؛ } else {return recursion (n - 1، n * subTotal)؛ }} ؛ عودة العودية (ن ، 1) ؛ }؛ 

وظيفة ، شروط البرمجة