यह समस्या मुख्य रूप से एल्गोरिथ्म पर ध्यान केंद्रित कर रही है, शायद कुछ सार और अधिक अकादमिक।
उदाहरण एक विचार की पेशकश कर रहा है, मैं एक सामान्य तरीका चाहता हूं, इसलिए उदाहरण का उपयोग केवल हमारे विचारों के बारे में अधिक स्पष्ट रूप से करने के लिए किया जाता है।
सामान्यतया, एक लूप को पुनरावर्ती में बदला जा सकता है।
उदाहरण के लिए:
for(int i=1;i<=100;++i){sum+=i;}
और इसका संबंधित पुनरावर्ती है:
int GetTotal(int number)
{
if (number==1) return 1; //The end number
return number+GetTotal(number-1); //The inner recursive
}
और अंत में इसे सरल बनाने के लिए, एक पुनरावर्ती की आवश्यकता है:
int GetTotal (int number, int sum)
{
if(number==1) return sum;
return GetTotal(number-1,sum+number);
}
हालांकि, ज्यादातर मामलों में जवाब देना और विश्लेषण करना इतना आसान नहीं होता है। मैं जो जानना चाहता हूं वह है:
1) क्या हम एक पुनरावर्ती के लिए लूप (/ ………) में परिवर्तित करने के लिए "सामान्य सामान्य तरीका" प्राप्त कर सकते हैं? और रूपांतरण करते समय हमें किस तरह की चीजों पर ध्यान देना चाहिए? बेहतर होगा कि कुछ नमूनों और अपने प्रेरक सिद्धांतों के साथ-साथ रूपांतरण प्रक्रिया के साथ विस्तृत जानकारी लिखें।
2) "पुनरावर्ती" के दो रूप हैं: रेखीय पुनरावर्ती और पूंछ-पुनरावर्ती। तो कौन सा रूपांतरित करना बेहतर है? हमें किस "नियम" पर चलना चाहिए?
3) कभी-कभी हमें पुनरावर्ती के "इतिहास" को रखने की आवश्यकता होती है, यह आसानी से एक लूप स्टेटमेंट में किया जाता है:
उदाहरण के लिए:
List<string> history = new List<string>();
int sum=0;
for (int i=1;i<=100;++i)
{
if(i==1) history.Add(i.ToString()+"'s result is:1.");
else
{
StringBuilder sub = new StringBuilder();
for(int j=1;j<=i;++j)
{
if(j==i) sbu.Append(j.ToString());
else
{
sub.Append(j.ToString()+"+");
}
}
sum +=i;
sbu.Append("'s result is:"+sum+Environment.NewLine);
}
}
नीचे परिणाम है:
1 का परिणाम 1 है।
1 + 2 का परिणाम 3 है।
1 + 2 + 3 का परिणाम 6 ……… है
हालांकि मुझे लगता है कि इतिहास को पुनरावर्ती में रखना कठिन है, क्योंकि एक पुनरावर्ती-आधारित एल्गोरिथ्म अंतिम परिणाम प्राप्त करने और कॉल-बैक रिटर्न करने पर ध्यान केंद्रित करता है। तो ये सभी स्टैक के माध्यम से प्रोग्रामिंग भाषा द्वारा बनाए गए स्टैक के माध्यम से मेमोरी को स्टैक के रूप में स्वचालित रूप से किया जाता है। और हम "मैन्युअल रूप से" प्रत्येक "स्टैक मान" को कैसे निकाल सकते हैं और पुनरावर्ती एल्गोरिथ्म के माध्यम से कई मान लौटा सकते हैं?
और "पुनरावर्ती एल्गोरिथ्म से लूप तक" के बारे में क्या? क्या उन्हें एक दूसरे में परिवर्तित किया जा सकता है (मुझे लगता है कि यह सैद्धांतिक रूप से किया जाना चाहिए, लेकिन मैं अपने विचारों को साबित करने के लिए अधिक सटीक चीजें चाहता हूं) ।