c語言實現(xiàn)
#include<stdio.h>
#include<time.h>
#include <windows.h>
#pragma warning( disable : 4996)
typedef unsigned long long int longint;
//這個是為longlong類型整形的無符號的類型起個別名為longint,
//主要是為了輸出更大的數(shù)栈幸,主要是為了輸出更大斐波那契數(shù)的時候使用淳附,可以不用管這個
longint diedai(int n);
void digui_show(int n);
void diedai_show(int n);
longint digui(int n);
int main()
{
int n = 40;
//聲明四個個時間類型的變量,主要是比較迭代和遞歸使用的時間
DWORD diedai_start, diedai_stop, digui_start, digui_stop;
printf("########迭代方法##########\n");
diedai_start = GetTickCount();
//調(diào)用迭代方法
diedai_show(n);
diedai_stop = GetTickCount();
longint l = diedai_stop - diedai_start;
printf("\n迭代使用輸出%d個數(shù)使用的時間為: %lld ms\n",n, l);
printf("########遞歸方法##########\n");
digui_start = GetTickCount();
//調(diào)用遞歸方法
digui_show(n);
digui_stop = GetTickCount();
longint l2 = digui_stop - digui_start;
printf("\n遞歸使用輸出%d個數(shù)使用的時間為: %lld ms\n", n, l2);
system("pause");
return 0;
}
void diedai_show(int n) {
//這個函數(shù)是通過for循環(huán)調(diào)用迭代的方法輸出N個斐波那契的數(shù)
for (int i = 1; i <= n; i++) {
if (i % 4 == 0 && i>1)printf("\n");
printf("%8lld\t\t", diedai(i));
}
}
void digui_show(int n) {
//這個函數(shù)是通過for循環(huán)調(diào)用遞歸的方法輸出N個斐波那契的數(shù)
for (int i = 1; i <= n; i++) {
if (i % 4 == 0 && i > 1)printf("\n");
printf("%8lld\t\t", digui(i));
}
}
longint diedai(int n){
//這個函數(shù)是通過迭代的方法返回第N個斐波那契的數(shù)
longint i = 0, x1 = 0, x2 = 1, x3 = 0;
if (n < 2)return 1;
for (i = 2; i <= n; i++)
{
/*這是實現(xiàn)疊加也是迭代的for循環(huán),n是第幾個斐波那契的數(shù)蒙保,然后就迭代n次*/
x3 = x1 + x2;
x1 = x2;
x2 = x3;
}
return x3;
}
longint digui(int n) {
//這個函數(shù)是通過遞歸的方法返回第N個斐波那契的數(shù)
if (n ==1||n==2)
{
return 1;
}
return digui(n - 2) + digui(n - 1);
}
兩種方法的性能對比還是很明顯的辕棚,所以在使用斐波那契的一定要選擇合適的方式