C#用递归算法实现:一列数的规则如下: 1、1、2、3、5、8、13、21、34,求第30位数是多少
方法一:递归算法
///<summary>
///一列数的规则如下:1、1、2、3、5、8、13、21、34求第30位数是多少,用递归算法实现。(C#语言)
///</summary>
///<paramname="pos"></param>
///<returns></returns>
publicintGetNumberAtPos(intpos)
{
if(pos==0||pos==1)
{
return1;
}
intres=GetNumberAtPos(pos-1)+GetNumberAtPos(pos-2);
returnres;
}
方法二:不用递归
usingSystem;
usingSystem.Collections;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceTest
{
publicclassClass1
{
privateArrayListlist=newArrayList();
publicClass1()
{
}
publicClass1(intnum)
:base()
{
inti;
for(i=1;i<=num;i++)
{
list.Add(Calculation(i));
}
}
privateintCalculation(intnum)
{
if(num==1||num==2)
return1;
else
returnConvert.ToInt32(list[num-2])+Convert.ToInt32(list[num-3]);
}
publicintCalculation()
{
returnConvert.ToInt32(list[list.Count-1]);
}
}
publicclasstest
{
publicstaticvoidMain()
{
intj;
intnum;
for(j=1;j<100;j++)
{
Console.WriteLine("你要计算第多少位:");
stringreadstr;
readstr=Console.ReadLine();
if(!string.IsNullOrEmpty(readstr))
{
if(int.TryParse(readstr,outnum))
{
if(num<1)
continue;
else
{
Class1c1=newClass1(num);
Console.WriteLine(c1.Calculation());
}
}
else
{
continue;
}
}
else
{
break;
}
}
}
}
}
方法三:用循环实现
publiclonggetNumber(intpos)
{
longone=1;
longtwo=1;
if(pos==0||pos==1)
{
return1;
}
inti=3;
longsum=1;
while(i<=pos)
{
sum=one+two;
one=two;
two=sum;
i++;
}
returnsum;
}
以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持毛票票。