斐波那契数列
递归思路:
一个递归函数一定可以分解为基础与递归两个部分。而递归部分每次调用都要使其参数向基础部分接近。对于简单的递归函数,基础部分就是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(n−1)+f(n−2)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;
}