程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 面試題9:斐波那契數列

面試題9:斐波那契數列

編輯:C++入門知識

\
 

方法一:很容易想到的解法是直接使用遞歸。

C++代碼:

 

#include "stdafx.h"   
#include <iostream>   
using namespace std;  
  
long long Fibonacci(unsigned int n)  
{  
    if (n == 0)  
    {  
        return 0;  
    }  
  
    if (n == 1)  
    {  
        return 1;  
    }  
  
    return Fibonacci(n-1) + Fibonacci(n-2);  
}  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    unsigned int n = 10;  
    cout << Fibonacci(n) << endl;  
    system("pause");  
    return 0;  
}  
#include "stdafx.h"
#include <iostream>
using namespace std;

long long Fibonacci(unsigned int n)
{
    if (n == 0)
    {
		return 0;
    }

	if (n == 1)
	{
		return 1;
	}

	return Fibonacci(n-1) + Fibonacci(n-2);
}

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned int n = 10;
	cout << Fibonacci(n) << endl;
	system("pause");
	return 0;
}

缺點:很顯然效率很低,因為存在重復計算的問題。

 


方法二:改進方法是將已經得到的數列中間項保存起來,下次使用時直接查找即可,避免重復計算。

C++代碼:

 

#include "stdafx.h"   
#include <iostream>   
using namespace std;  
  
long long Fibonacci(unsigned int n)  
{  
    if (n == 0)  
    {  
        return 0;  
    }  
  
    if (n == 1)  
    {  
        return 1;  
    }  
  
    long long one = 0;  
    long long two = 1;  
    long long result = 0;  
  
    for (unsigned int i=2; i<=n; i++)  
    {  
        result = one + two;  
        one = two;  
        two = result;  
    }  
  
    return result;  
}  
  
int _tmain(int argc, _TCHAR* argv[])  
{  
    unsigned int n = 100;  
    cout << Fibonacci(n) << endl;  
    system("pause");  
    return 0;  
}  
#include "stdafx.h"
#include <iostream>
using namespace std;

long long Fibonacci(unsigned int n)
{
    if (n == 0)
    {
		return 0;
    }

	if (n == 1)
	{
		return 1;
	}

	long long one = 0;
	long long two = 1;
	long long result = 0;

	for (unsigned int i=2; i<=n; i++)
	{
		result = one + two;
        one = two;
		two = result;
	}

	return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned int n = 100;
	cout << Fibonacci(n) << endl;
	system("pause");
	return 0;
}



 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved