في برمجة الكمبيوتر ، يمثل تكرار العودية استخدام استدعاء الذيل لإجراء وظيفة عودية. استدعاء الذيل هو عندما يتم استدعاء وظيفة كعمل آخر لوظيفة أخرى. على سبيل المثال ، في برنامج 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) ؛ }؛
وظيفة ، شروط البرمجة