求斐波那契数列的两种方式

斐波那契数列

递归思路:

一个递归函数一定可以分解为基础与递归两个部分。而递归部分每次调用都要使其参数向基础部分接近。对于简单的递归函数,基础部分就是if的部分,递归部分就是return部分。

斐波那契数列的函数表示为:
f ( x ) = { 1 x=0,x=1 f ( n − 1 ) + f ( n − 2 ) x>1 f(x)= \begin{cases} 1& \text{x=0,x=1}\\ f(n-1)+f(n-2)& \text{x>1} \end{cases} f(x)={1f(n1)+f(n2)x=0,x=1x>1
其中已知f(1)=1,f(2)=1属于基础部分,f(n) = f(n-1)+f(n-2)属于递归部分。

对应的代码:

int fib(int N)
{
	if(N == 1 || N == 0)	return 1;
	return fib(N-1) + fib(N-2);
}

循环思路:

新的结果result等于旧的result结果加上前一项的值。将结果记为result ,将前一项的值记flag(初始为1) ,即result = flag + result;实现的result的推进。在result推进后,同样对于原来的前一项值flag也要推进。flag要等与旧的result的值。为此我们需要早result没有改变前即result = flag + result;先保留一份result的值记作flag2,在result推进后将将保留的result的值赋给flag,实现flag的推进。

图解:
在这里插入图片描述

对应的代码:

int fib_g(int N)
{
	int flag = 1,flag2 = 0;
	int result = 0;
	for(int i=1;i<=N;i++)
	{
		flag2 = result;
		result = flag + result;
		flag = flag2;
	}

	return result;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去留意

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值