সরলভাবে বলা হয়েছে, টেল রিকার্সন এমন একটি পুনরাবৃত্তি যা সংকলকটি "গোটো" কমান্ডের মাধ্যমে পুনরাবৃত্ত কলকে প্রতিস্থাপন করতে পারে, তাই সংকলিত সংস্করণটিকে স্ট্যাকের গভীরতা বাড়াতে হবে না।
কখনও কখনও একটি লেজ-পুনরাবৃত্তি ফাংশন ডিজাইনের জন্য অতিরিক্ত পরামিতিগুলির সাহায্যে আপনাকে একটি সহায়ক ফাংশন তৈরি করতে হবে।
উদাহরণস্বরূপ, এই হল না একটি পুচ্ছ-রিকার্সিভ ফাংশন:
int factorial(int x) {
if (x > 0) {
return x * factorial(x - 1);
}
return 1;
}
তবে এটি একটি পুচ্ছ-পুনরাবৃত্তি ফাংশন:
int factorial(int x) {
return tailfactorial(x, 1);
}
int tailfactorial(int x, int multiplier) {
if (x > 0) {
return tailfactorial(x - 1, x * multiplier);
}
return multiplier;
}
কারণ সংকলক এর পুনরুক্তি ফাংশনটিকে পুনরায় লিখতে পারে এমন কোনও পুনঃবিবেচনাকারী হিসাবে, এর মতো কিছু ব্যবহার করে (সিউডোকোড):
int tailfactorial(int x, int multiplier) {
start:
if (x > 0) {
multiplier = x * multiplier;
x--;
goto start;
}
return multiplier;
}
সংকলকটির নিয়মটি খুব সহজ: আপনি " return thisfunction(newparameters);
" যখন খুঁজে পান, তখন এটি " " দিয়ে প্রতিস্থাপন করুন parameters = newparameters; goto start;
। তবে এটি কেবল তখনই করা যেতে পারে যখন পুনরাবৃত্ত কলের দ্বারা প্রত্যাবর্তিত মানটি সরাসরি ফিরে আসে।
যদি কোনও ফাংশনের সমস্ত পুনরাবৃত্ত কলগুলি এইভাবে প্রতিস্থাপন করা যায়, তবে এটি একটি লেজ-পুনরাবৃত্তি ফাংশন।