পুনরাবৃত্তি ফাংশন একটি ফাংশন যা নিজেই কল করে
এটি প্রোগ্রামারদের ন্যূনতম পরিমাণ কোড ব্যবহার করে দক্ষ প্রোগ্রাম লেখার অনুমতি দেয় ।
ক্ষয়ক্ষতিটি হ'ল তারা যথাযথভাবে লেখা না থাকলে অসীম লুপ এবং অন্যান্য অপ্রত্যাশিত ফলাফলের কারণ হতে পারে ।
আমি সাধারণ পুনরাবৃত্তি ফাংশন এবং টেল রিকার্সিভ ফাংশন উভয়ই ব্যাখ্যা করব
একটি সাধারণ পুনরাবৃত্তির কাজ লিখতে যাতে
- বিবেচনা করার প্রথম বিষয়টি হ'ল লুপটি কখন লুপ থেকে বেরিয়ে আসার সিদ্ধান্ত নেবে
- দ্বিতীয়টি হ'ল আমরা আমাদের নিজস্ব ফাংশন হলে কী প্রক্রিয়া করব
প্রদত্ত উদাহরণ থেকে:
public static int fact(int n){
if(n <=1)
return 1;
else
return n * fact(n-1);
}
উপরের উদাহরণ থেকে
if(n <=1)
return 1;
লুপ থেকে প্রস্থান করার সময় সিদ্ধান্ত নেওয়ার কারণ
else
return n * fact(n-1);
আসল প্রক্রিয়াজাতকরণ করা
সহজ বোঝার জন্য আমাকে একের পর এক কাজটি বিরতি দিন।
আমি দৌড়ে গেলে অভ্যন্তরীণভাবে কী ঘটে তা দেখা যাক fact(4)
- প্রতিস্থাপন n = 4
public static int fact(4){
if(4 <=1)
return 1;
else
return 4 * fact(4-1);
}
If
লুপ ব্যর্থ হয় তাই এটি else
লুপ যায় তাই এটি ফিরে4 * fact(3)
স্ট্যাক মেমরি, আমরা আছে 4 * fact(3)
প্রতিস্থাপন n = 3
public static int fact(3){
if(3 <=1)
return 1;
else
return 3 * fact(3-1);
}
If
লুপ ব্যর্থ তাই এটি else
লুপ যায়
সুতরাং এটি ফিরে আসে 3 * fact(2)
মনে রাখবেন আমরা called `` 4 * ফ্যাক্ট (3) `` বলেছি `
জন্য আউটপুট fact(3) = 3 * fact(2)
এখনও পর্যন্ত স্ট্যাক আছে 4 * fact(3) = 4 * 3 * fact(2)
স্ট্যাক মেমরি, আমরা আছে 4 * 3 * fact(2)
প্রতিস্থাপন n = 2
public static int fact(2){
if(2 <=1)
return 1;
else
return 2 * fact(2-1);
}
If
লুপ ব্যর্থ তাই এটি else
লুপ যায়
সুতরাং এটি ফিরে আসে 2 * fact(1)
মনে আছে আমরা ডেকেছি 4 * 3 * fact(2)
জন্য আউটপুট fact(2) = 2 * fact(1)
এখনও পর্যন্ত স্ট্যাক আছে 4 * 3 * fact(2) = 4 * 3 * 2 * fact(1)
স্ট্যাক মেমরি, আমরা আছে 4 * 3 * 2 * fact(1)
প্রতিস্থাপন n = 1
public static int fact(1){
if(1 <=1)
return 1;
else
return 1 * fact(1-1);
}
If
লুপ সত্য
সুতরাং এটি ফিরে আসে 1
মনে আছে আমরা ডেকেছি 4 * 3 * 2 * fact(1)
জন্য আউটপুট fact(1) = 1
এখনও পর্যন্ত স্ট্যাক আছে 4 * 3 * 2 * fact(1) = 4 * 3 * 2 * 1
শেষ অবধি, ফলাফলের ফলাফল (4) = 4 * 3 * 2 * 1 = 24
লেঙ্গুড় Recursion হবে
public static int fact(x, running_total=1) {
if (x==1) {
return running_total;
} else {
return fact(x-1, running_total*x);
}
}
- প্রতিস্থাপন n = 4
public static int fact(4, running_total=1) {
if (x==1) {
return running_total;
} else {
return fact(4-1, running_total*4);
}
}
If
লুপ ব্যর্থ হয় তাই এটি else
লুপ যায় তাই এটি ফিরেfact(3, 4)
স্ট্যাক মেমরি, আমরা আছে fact(3, 4)
প্রতিস্থাপন n = 3
public static int fact(3, running_total=4) {
if (x==1) {
return running_total;
} else {
return fact(3-1, 4*3);
}
}
If
লুপ ব্যর্থ তাই এটি else
লুপ যায়
সুতরাং এটি ফিরে আসে fact(2, 12)
স্ট্যাক মেমরি, আমরা আছে fact(2, 12)
প্রতিস্থাপন n = 2
public static int fact(2, running_total=12) {
if (x==1) {
return running_total;
} else {
return fact(2-1, 12*2);
}
}
If
লুপ ব্যর্থ তাই এটি else
লুপ যায়
সুতরাং এটি ফিরে আসে fact(1, 24)
স্ট্যাক মেমরি, আমরা আছে fact(1, 24)
প্রতিস্থাপন n = 1
public static int fact(1, running_total=24) {
if (x==1) {
return running_total;
} else {
return fact(1-1, 24*1);
}
}
If
লুপ সত্য
সুতরাং এটি ফিরে আসে running_total
জন্য আউটপুট running_total = 24
অবশেষে, ফলাফলের ফলাফল (4,1) = 24