将循环(while / for)转换为递归或从递归转换为循环的一般方法?
这个问题主要集中在算法上,也许是抽象的并且更学术化。 这个例子提供了一个想法,我想用一种通用的方式,所以例子仅用于使我们更清楚地了解您的想法。 一般来说,循环可以转换为递归的。 例如: 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)我们能否获得一种“通用方式”将循环(for / while……)转换为递归?在进行转换时,我们应该注意哪些事情?最好写一些示例的详细信息以及您的persudo理论以及转换过程。 2)“递归”具有两种形式:线性递归和尾递归。那么哪个转换更好呢?我们应该掌握什么“规则”? 3)有时我们需要保留递归的“历史”,这很容易在循环语句中完成: 例如: List<string> history = new List<string>(); …