斐波那契数列的两种简单实现

近期一次面试,提到了斐波那契数列的实现,算法还是比较简单的,用了两种方法实现(两种方式写到了一个程序中),代码如下:

#include "stdio.h"
#include "stdlib.h"

int fibonacci(int step)
{
	if (step == 0)
		return 0;
	if (step == 1)
		return 1;
	return fibonacci(step-1)+fibonacci(step-2);
}

int main()
{
	int n = 0;
	printf("Please Input the interger:\n");
	scanf("%d", &n);
	
	//使用递归方式
	int value = fibonacci(n);
	printf("Using Recursive, Fibonacci %d is %d\n", n, value);
	
	//使用常规数组方式
	value =0;
	int a[2]={0};
	a[0]=0;
	a[1] =1;
	if (n ==0)
		value=0;
	else if (n == 1)
		value = 1;
	else
	{
		for(int i =2; i <= n; i++)
		{
			value = a[1]+a[0];
			a[0]=a[1];
			a[1]=value;
		}
	}

	printf("Using Array, Fibonacci %d is %d\n", n, value);
	
	return 0;
}
面试过程中讨论如下:

递归和数组方式,那个更好?简单说,递归方式的时间复杂度要高,算法可读性一般,数组方式时间复杂度O(n),易理解。在数据n很大的情况下,递归方式的性能很差

两种算法各有千秋。

如何设计测试用例对代码进行测试?数据0,1,2必须测试,另随机找几个整数。取n较大时查看算法占用的时间和资源。算法中使用了int做为存贮数值的结果,n较大时可能会造成溢出。

大致就是这些了,很长时间没有关注过基础算法,面试中提到了有没有更优化的算法,没有回答出来,发挥一般。

ps:还不知道什么是大名鼎鼎的斐波那契数列吗?如果是,那就搜索一下吧,有所耳闻,那就深度搜索一下其在各个方面的应用,很有意思的。

ps:增加时间跟踪函数发现,n在大于40以后,递归算法简直无法忍受,大概是函数调用开销实在是太大了。
另如果用int保存结果值,那么n=47时就溢出了,需要使用long但是到了一定的数量也会溢出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值