飞狐.net

人的每一步行动,都在书写自己的历史
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

fibonacci数列算法求解的三种算法比较

Posted on 2007-02-26 17:30  飞狐时代  阅读(1433)  评论(0)    收藏  举报
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,就可以看到效果了,用递归就要等待很久.
飞狐.net·书写程序员的历史·创建于2006年12月
Copyright 2005 Silver fox© 飞狐.net All Rights Reserved.