递归算法递归算法
举例:
c#题目如下:
要求输出:1,2,3,5,8,13,21,34,55,89
写法一:
public class MyClass
{
public static void Main()
{
int[] cSum = new int[10];
string sSum="";
for (int i = 0; i < cSum.Length; i++)
{
if(i==0)
{
cSum[i]=1;
sSum=""+cSum[i];
}
else if(i==1)
{
cSum[i]=cSum[i-1]+cSum[i-1];
sSum=sSum+','+cSum[i];
}
else
{
cSum[i]=cSum[i-1]+cSum[i-2];
sSum=sSum+','+cSum[i];
}
}
//输出结果1,2,3,5,8,13,21,34,55,89,普通写法
Console.WriteLine(sSum);
Console.ReadKey();
}
}
下面我打算介绍一些例子来帮助你更好的理解递归的风险和回报。
1. 阶乘
阶乘(!)是小于某个数的所有正整数的乘积。
0! = 1
1! = 1
2! = 2 * 1! = 2
3! = 3 * 2! = 6
...
n! = n * (n - 1)!
下面是计算阶乘的一种实现方法(没有递归):
复制代码 代码如下:
public long Factorial(int n)
{
if (n == 0)
return 1;
long value = 1;
for (int i = n; i > 0; i--)
{
value *= i;
}
return value;
}
下面是用递归的方法实现计算阶乘,与之前的代码比起来它更简洁。
复制代码 代码如下:
public long Factorial(int n)
{
if (n == 0)//限制条件,对该方法调用自己做了限制
return 1;
return n * Factorial(n - 1);
}
你知道的,n的阶乘实际上是n-1的阶乘乘以n,且n>0。
它可以表示成 Factorial(n) = Factorial(n-1) * n
这是方法的返回值,但我们需要一个条件
如果 n=0 返回1。
现在这个程式的逻辑应该很清楚了,这样我们就能够轻易的理解。