সহজ করে বলতে গেলে, কোন একটা ফাংশন যদি নিজেই নিজেকে কল করে সেটাই recursive function
ইংরেজি recursive এর বাংলা মানে হচ্ছে পুনরাবৃত্তি করা। repeat করা। ঘুরে ঘুরে একই জায়গায় ফেরত আসা।
যেমন ধর দুইটা সংখ্যা যোগ করার জন্য তুই নিচের মতো একটা ফাংশন লিখছস। যেটার নাম হচ্ছে যোগকর (joogKor) আর সেই ফাংশনে দুইটা ইনপুট নেয়া হচ্ছে- first ও second
তারপর 2 ও 3 যোগ করার জন্য ফাংশনের নিচে joogKor ফাংশনকে কল করে দিছস। নিচের মতো করে
function joogKor(first, second){
var joogFol = first + second;
return joogFol;
}
joogKor(2,3);
ধর তোর মাথা খারাপ হয়ে গেছে, তুই joogKor ফাংশনের ভিতরে return লেখা লাইনের আগে আবার joogKor ফাংশনকে কল করছস। অর্থাৎ ফাংশনের ভিতরের ভিতর থেকে সেই ফাংশনকেই আবার কল করছস। নিচের মতো করে।
function joogKor(first, second){
var joogFol = first + second;
joogKor(first, second);
return joogFol;
}
joogKor(2,3);
এখন উপরের কোডের দিকে তাকা। দেখবি ফাংশনের ভিতর থেকে সেই ফাংশনকে আবার কল করা হয়েছে।
উপরের কোডের সবশেষ লাইনে joogKor ফাংশনকে কল করা হইছে। এই কল করার পর সে joogKor ফাংশনের ভিতরে যাবে। সেখানে গিয়ে যখন joogKor ফাংশনকে কল করার বিষয়টা দেখবে। সেখান থেকে আবার abar joogKor ফ্যাংশনকে কল করবে। সেটা আবার যখন ভিতরে যাবে, তখন আবার ফাংশনের ভিতরে নিজেই নিজেকে কল করার বিষয়টা দেখবে। দেখে আবার সেটাকে কল করবে। এইভাবে একের পর এক নিজেই নিজেকে কল করতে থাকবে। সেটা আজীবন চলতে থাকবে।
এই আজীবন চলা জিনিসটা অনেক সময় প্রোগ্রামিংয়ের error বা ভুল দেখিয়ে বন্ধ হয়ে যায়। বা অনেক সময় প্রোগ্রাম হ্যাং হয়ে যায়।
উদাহরণ:
নিচের অংশ এখনো লেখা হয় নাই। তার আগেই বই পাবলিশ হয়ে গেছে। তবে দুইটা কথা মনে রাখবি
১. recursive ফাংশনে থামানোর জন্য একটা if থাকে আর else এর ভিতরে সেই ফাংশনকে আবার কল করা হয়।
২. recursive ফাংশনের একটা উদাহরণ মনে রাখবি। সেটা হচ্ছে কোন একটা সংখ্যার বিন্যাস বা factorial বের করার সময় চাইলে recursive ব্যবহার করা যায়।
function factorial(n) {
if (n === 0) {
return 1;
}
return n * factorial(n - 1);
}
factorial(8);