Fibonacci(斐波那契)序列的递归和非递归算法
2010-12-07 11:30
323 查看
Fibonacci(斐波那契)序列的递归算法大家都已经很熟悉了:
//
Fibonacci序列第n项的值
//
递归算法
unsigned int
Fib1(unsigned
int
n)
{
if
(n
==
1
||
n
==
2
)
return
1
;
else
return
Fib(n
-
1
)
+
Fib(n
-
2
);
}
而且递归算法的缺点是效率太低,下面是非递归算法:
//
Fibonacci序列第n项的值
//
非递归算法
unsigned
int
Fib2(unsigned
int
n)
{
unsigned
int
nRet, nP,
nPp
;
nRet = nP = nPp = 1;
if
((n
==
1
)
||
(n
==
2
))
return
nRet
;
for
(unsigned
int
i
=
3
; i
<=
n; i
++
)
{
nRet
=
nP
+
nPp;
nPp
=
nP;
nP
=
nRet;
}
return
nRet;
}
Fibonacci(斐波那契)序列:
Fib(n) = Fib(n - 1) + Fib(n - 2), n>1, Fib(1) = Fib(2) = 1
即:序列的第一和第二项是1,从第三项开始,后一项是前两项的和。
序列的前8项是:
1, 1, 2, 3, 5, 8, 13, 21
http://blog.csdn.net/starlee/archive/2006/02/13/598036.aspx
//
Fibonacci序列第n项的值
//
递归算法
unsigned int
Fib1(unsigned
int
n)
{
if
(n
==
1
||
n
==
2
)
return
1
;
else
return
Fib(n
-
1
)
+
Fib(n
-
2
);
}
而且递归算法的缺点是效率太低,下面是非递归算法:
//
Fibonacci序列第n项的值
//
非递归算法
unsigned
int
Fib2(unsigned
int
n)
{
unsigned
int
nRet, nP,
nPp
;
nRet = nP = nPp = 1;
if
((n
==
1
)
||
(n
==
2
))
return
nRet
;
for
(unsigned
int
i
=
3
; i
<=
n; i
++
)
{
nRet
=
nP
+
nPp;
nPp
=
nP;
nP
=
nRet;
}
return
nRet;
}
Fibonacci(斐波那契)序列:
Fib(n) = Fib(n - 1) + Fib(n - 2), n>1, Fib(1) = Fib(2) = 1
即:序列的第一和第二项是1,从第三项开始,后一项是前两项的和。
序列的前8项是:
1, 1, 2, 3, 5, 8, 13, 21
http://blog.csdn.net/starlee/archive/2006/02/13/598036.aspx
相关文章推荐
- Fibonacci(斐波那契)序列的递归和非递归算法
- Fibonacci(斐波那契)序列的递归和非递归
- 斐波那契序列的递归和非递归实现方法
- 斐波那契数与二分法的递归与非递归算法及其复杂度分析
- 斐波那契序列 Fibonacci
- 斐波那契序列——递归实现与非递归实现
- 斐波那契(Fibonacci)数列的递归和非递归实现
- 递归问题:Fibonacci序列,分数数列,过河卒,平面分隔问题,棋盘完美覆盖,数字序列
- 斐波那契数列(递归与非递归算法)
- 利用堆栈输出递归序列的若干项:Fibonacci序列
- 递归与非递归算法求序列所有排列组合
- Fibonacci(斐波那契)序列的递归算法
- 斐波那契的递归和非递归算法实现
- 斐波那契数列递归与非递归算法
- 循环与递归及Fibonacci(斐波那契)数列解法
- 斐波那契序列的递归和非递归实现方法
- 输入完全二叉树的先序序列,用#代表虚结点(空指针),如ABD###CE##F##,建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出
- 斐波那契序列的递归和非递归的实现
- 斐波那契数列的递归与非递归算法实现及其时间复杂度
- 斐波那契序列的递归和非递归的实现