大家好,又见面了,我是你们的朋友全栈君。
斐波那契数列:
1 1 2 3 5 8 13 21 34 55 …
fb(n) :
1 n <= 2
fb(n-1) + fb(n-2) n > 2
int fb(n)
{
if(n <= 2)
{
return 1;
}
else
{
return fb(n-1)+fb(n-2);
}
}
使用递归需进行,如果递归的深度并不是很深,便可以使用。递归的子问题一定要有解。(即递归一定要有回归条件。)
递归有两个过程:
递推:层层推进,分解问题
回归:层层回归,返回较大问题的解
递归函数的缺陷:
1.对栈的依赖性太高,需要耗费大量的栈空间来实现递推过程
2.逻辑简单,好理解。
只要是函数,都可以自己调用自己,但是,禁止main调用main函数。(即main自己调用自己)(容易产生栈的上溢。)
使用迭代来实现斐波那契数列:
int fb(n)
{
if(n <= 2)
{
return 1;
}
int n1 = 1, n2 = 1, n3 = 0;
int i = 0;
for(i = 3; i <= n; i++)
{
n3 = n1 + n2;
n1 = n2;
n2 = n3;
}
return n3;
}
递归和迭代的区别:
1.什么是递归
是一种算法思想:是将大问题分解成若干个结构相同的子问题,只有解决子问题才能求得大问题的解。我们将这样的算法思想称之为递归。
在C语言中,有一种函数,该函数可以在函数体中调用自己,这样函数称之为递归函数。
递归有两个过程:
递推
回归
2.什么是迭代
迭代是对递归的一种优化,递归将递推的过程交给了计算机,让计算机代替人去分析问题。而迭代将递推(归纳抽象解决方案)的过程交给
了程序员。进而减小了机器在递推过程中对栈的消耗,大大提高了算法效率。
3.递归的特点
1.解放了人
2.对栈的消耗大
3.算法的效率低下,不能过多层的递归
4.迭代的特点
1.需要人去分析迭代过程
2.减小的对栈的开销
3.算法的效率高
5.什么时候使用递归
1.递归层次不多
2.对于栈消耗不是很大时
6.什么时候使用迭代
如果一个问题,可以使用迭代来实现,就尽量使用迭代。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135253.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...