रिकर्सिव फंक्शन एक ऐसा फंक्शन है जो खुद से कॉल करता है
यह प्रोग्रामर को कम से कम कोड का उपयोग करके कुशल प्रोग्राम लिखने की अनुमति देता है ।
नकारात्मक पक्ष यह है कि वे ठीक से नहीं लिखे जाने पर अनंत छोरों और अन्य अप्रत्याशित परिणामों का कारण बन सकते हैं ।
मैं Simple Recursive function और Tail Recursive function दोनों की व्याख्या करूँगा
एक साधारण पुनरावर्ती कार्य लिखने के लिए
- विचार करने के लिए पहला बिंदु यह है कि आपको लूप से बाहर आने का फैसला करना चाहिए जो अगर लूप है
- दूसरा यह है कि अगर हम अपने स्वयं के कार्य करते हैं तो क्या करना है
दिए गए उदाहरण से:
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)
प्रतिस्थापित करना = ३
public static int fact(3){
if(3 <=1)
return 1;
else
return 3 * fact(3-1);
}
If
लूप विफल रहता है इसलिए यह else
लूप में जाता है
तो यह लौट आता है 3 * fact(2)
याद रखें कि हमने `` `4 * तथ्य (3)` `कहा
के लिए उत्पादन fact(3) = 3 * fact(2)
अब तक ढेर है 4 * fact(3) = 4 * 3 * fact(2)
स्टैक मेमोरी में, हमारे पास है 4 * 3 * fact(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)
प्रतिस्थापित करना = १
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)
प्रतिस्थापित करना = ३
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)
प्रतिस्थापित करना = २
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)
प्रतिस्थापित करना = १
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 का परिणाम