来源:微信公众号「编程学习基地」
首先这是一个面试题,题目是这样的
有一个数列是1,1,2,3,5,8…请编程写出第50个数字是多少
这么简单?不就是斐波那契数列吗,看我的
#include<stdio.h>
#include<time.h>
double fun(double n){
if (n < 0)
return 0;
if (n == 1 || n == 2)
return (double)1;
return fun(n - 1) + fun(n - 2);
}
int main()
{
clock_t start, stop;
start = clock(); //开始计时
printf("%.lf\n", fun(50));
stop = clock(); //停止计时
double duration = ((double)(stop - start)) / CLK_TCK;
printf("计算所需时间:%lf\n", duration);
printf("over");
return 0;
}
递归用起来,看着是很简单,但是效率不敢恭维
12586269025
计算所需时间:442.055000
over
这是计算结果,用时442s
递归深似海,慎用
还是简单第累加求斐波那契吧
#include<stdio.h>
#define NUM 50
int main()
{
double arr[100];
double first = 1, second = 1;
for (int i = 0; i < 50; ++i){
arr[2*i] = first;
arr[2*i + 1] = second;
first = first + second;
second = second + first;
}
printf("arr[%d]:%.lf\n", NUM - 1, arr[NUM - 1]);
//for (int i = 0; i < 50; i++)
// printf("arr[%d]:%.lf\n", i, arr[i]);
return 0;
}
计算结果几乎秒出
arr[49]:12586269025