using System;
using System.Diagnostics;
namespace myFib
{
/// <summary>
/// Fib 的摘要说明。
/// fibonacci数列算法
/// </summary>
public class Fib
{
public Fib()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
static void Main(string[] args)
{
bool iscon=true;
while(iscon)
{
System.Console.WriteLine("请输入一个整数或exit退出:");
string strcon=System.Console.ReadLine();
if (strcon.ToLower()=="exit")
iscon=false;
else
{
try
{
long myinput=long.Parse(strcon);
System.Console.WriteLine("请选择计算方法:1.迭代法 2.数组算法 3.递归算法");
int iway=int.Parse(System.Console.ReadLine());
long mResult=0;
StopWatch sw=new StopWatch();
sw.start();
switch (iway)
{
case 1:
mResult=getcommon(myinput);
System.Console.WriteLine("迭代法的结果是:" + mResult.ToString());
System.Console.WriteLine("迭代法的执行时间是:" +sw.elapsed().ToString());
break;
case 2:
mResult=getArrayResult(myinput);
System.Console.WriteLine("数组算法的结果是:" + mResult.ToString());
System.Console.WriteLine("数组算法的执行时间是:" +sw.elapsed().ToString());
break;
case 3:
mResult=getResult(myinput);
System.Console.WriteLine("递归算法的结果是:" + mResult.ToString());
System.Console.WriteLine("递归算法的执行时间是:" +sw.elapsed().ToString());
break;
default:
System.Console.WriteLine("你什么都没选!");
break;
}
}
catch (System.Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
}
}
static Int64 getResult(Int64 n)
{
if (n<1)
return 0;
else if (n<3)
return 1;
else
return getResult(n-1)+ getResult(n-2);
}
static long getArrayResult(long n)
{
long[] test = new long[n];
if (n<1)
return 0;
else
{
test[0] = 1;
test[1] = 1;
for(int i=2;i<n;i++)
{
test[i] = test[i-1]+test[i-2];
}
return test[n-1];
}
}
static long getcommon(long n)
{
if (n<1)
return 0;
else if (n<3)
return 1;
else
{
int a=1;
int b=1;
int s=0;
for (int i=3;i<=n;i++)
{
s=a+b;
a=b;
b=s;
}
return s;
}
}
}
class StopWatch
{
private int mintStart; 
public void start()
{
mintStart =System.Environment.TickCount;
} 
public long elapsed()
{
return System.Environment.TickCount - mintStart;
}
} 

}

//在本程序中,迭代法和数组算法的执行效率远远高于递归方法.所以此数列不一定要采用递归,用非递归的方法更有效率.如果输入45,就可以看到效果了,用递归就要等待很久.


浙公网安备 33010602011771号