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();
}
}
Snippet Compliler调试通过
这样写虽然能实现,但是感觉不大好,重构,用递归写法
写法二:
public class MyClass
{
public static void Main()
{
int[] cSum= new int[10];
string sSum="";
for(int j=0;j<cSum.Length;j++)
{
cSum[j]= process(j);
if(sSum!="")
{
sSum=sSum+',';
}
sSum+=cSum[j];
}
//输出结果1,2,3,5,8,13,21,34,55,89,递归写法
Console.WriteLine(sSum);
Console.ReadKey();
}
public static int process(int i)
{
int s;
if(i==0||i==1)
{
s=i+1;
}
else
{
s=process(i-1)+process(i-2);
}
return s;
}
}
通过递归算法重构了写法一
下面留个题目,要求输出:1,1,2,3,5,8,13,21,34,55
写法三:
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||i==1)
{
cSum[i]=1+cSum[i];
if(sSum!="")
{
sSum+=",";
}
sSum+=cSum[i];
}
else
{
cSum[i]=cSum[i-1]+cSum[i-2];
sSum=sSum+','+cSum[i];
}
}
//输出结果1,1,2,3,5,8,13,21,34,55
Console.WriteLine(sSum);
Console.ReadKey();
}
} |