Bu problem temel olarak algoritmaya, belki de soyut ve daha akademik bir şeye odaklanmaktadır.
Örnek bir düşünce sunuyor, ben genel bir yol istiyorum, bu nedenle örnek yalnızca düşünceleriniz hakkında bizi daha net hale getirmek için kullanılır.
Genel olarak konuşursak, bir döngü özyinelemeli olarak dönüştürülebilir.
Örneğin:
for(int i=1;i<=100;++i){sum+=i;}
Ve ilgili özyinelemeli:
int GetTotal(int number)
{
if (number==1) return 1; //The end number
return number+GetTotal(number-1); //The inner recursive
}
Ve sonunda bunu basitleştirmek için kuyruk özyinelemeye ihtiyaç var:
int GetTotal (int number, int sum)
{
if(number==1) return sum;
return GetTotal(number-1,sum+number);
}
Ancak, çoğu durumda cevaplaması ve analizi o kadar kolay değildir. Bilmek istediğim şey:
1) Bir döngüyü tekrarlamak için (için / süre ……) özyinelemeye dönüştürmek için "genel bir ortak yol" alabilir miyiz? Ve dönüşüm yaparken ne gibi şeylere dikkat etmeliyiz? Dönüştürme işleminin yanı sıra bazı örnekler ve persudo teorilerinizle ayrıntılı bilgi yazmak daha iyi olacaktır.
2) "Özyinelemeli" iki şekli vardır: Doğrusal özyinelemeli ve Özyinelemeli. Peki hangisini dönüştürmek daha iyidir? Hangi "kural" ı usta yapmalıyız?
3) Bazen özyinelemeli "tarihini" tutmamız gerekir, bu kolayca bir döngü ifadesinde yapılabilir:
Örneğin:
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);
}
}
Aşağıdaki sonuç:
1'in sonucu 1.
1 + 2'nin sonucu 3.
1 + 2 + 3 sonucu 6 …………
Ancak, özyinelemeyi özyinelemede tutmanın zor olduğunu düşünüyorum, çünkü özyinelemeli tabanlı bir algoritma son sonucu elde etmeye ve geri arama dönüşü yapmaya odaklanır. Böylece bunların hepsi programlama dili tarafından tutulan yığın üzerinden otomatik olarak yığın şeklinde bellek tahsis ederek yapılır. Ve "yığın değerlerinin" her birini "elle" nasıl el ile alabiliriz ve özyinelemeli bir algoritma ile birden fazla değeri nasıl döndürebiliriz?
Peki ya "özyinelemeli bir algoritmadan bir döngüye"? Birbirlerine dönüştürülebilirler mi (teorik olarak yapılması gerektiğini düşünüyorum, ama düşüncelerimi kanıtlamak için daha doğru şeyler istiyorum) .