求斐波那契数列用递归还是累加

在这里插入图片描述

来源:微信公众号「编程学习基地」

首先这是一个面试题,题目是这样的

有一个数列是112358…请编程写出第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

猜你喜欢

转载自blog.csdn.net/qq_44519484/article/details/108798244
今日推荐