首页 > 编程知识 正文

递归和迭代方法编程,递归中一定有迭代

时间:2023-05-05 00:43:13 阅读:14727 作者:1310

一、比较相同点:

递归和迭代都是循环的一种。 不同之处:

1、程序结构不同

递归是指反复调用函数本身来实现循环。 迭代是指函数中的某个代码实现循环。 其中,反复和通常循环的区别在于迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。

2、算法结尾方式不同

在递归循环中,如果满足结束条件,则按层次返回结束。 迭代使用计数器结束循环。 当然,多种循环混合采用,但这是根据具体需要进行的。

3、效率不同

循环次数多时,迭代的效率明显高于递归。 (参照2中实施例3 )

二、实例1、递归:给定整数数组,使用折半查询返回指定值数组中的索引。 假设数组已排序,为了便于说明,假设元素都是正数,数组长度是2的整数倍。

intfind(int*ary,int index,int len,int value ) if ) len==1) /最后一个元素) if ) ary[index]==value )返回索引//库//检查检查的值是否大于上半部分的最后一个值,如果是,则返回查询的后半部分的if(valueary[indexhalf-1] ) returnfind ) ary、index half、half、half //否则递归查询上半部分的返回查找(ary、index、half、value ); (2,迭代)计算实数累积,例如1-100的所有实数之和。

int v=1; for(I=2; i=100; I ) ) { v=v i; ) 3、综合应用)淘气宝贝数列分别通过递归和迭代实现)问题)兔出生后两个月有繁殖能力,一对兔每月能生一对幼兔,假设所有兔不死,一年后能繁殖多少对兔

分析:前面两个相邻项之和构成了后者项。 如图所示,

数学定义:

代码实现:

#include'stdio.h'intFBI(intI )/*淘气宝宝的递归函数((/if ) I2 ) return i==0? 0 : 1; 返回联邦调查局(I-1 )联邦调查局(I-2 ); /*其中Fbi是函数自身,自己*/} int main () ) {int i; int a[40]; 反复显示printf ()淘气的宝物数列((n ) ); a[0]=0; a[1]=1; printf('%d ',a[0] ); printf('%d ',a[1]; for(I=2; i 40; I ) a(I )=a(I-1 ) a (I-2 ); printf('%d ',a[i] ); }printf((n ); printf (递归表示淘气的宝物数列((n ) ); for(I=0; i 40; I ) printf('%d ',FBI ) I ); 返回0; }执行结果:

运行过程显示,在在循环的次数较大的时候,迭代的效率明显高于递归上例中,迭代结果的所有打印完成时间不到0.5s,但递归结果的前两列打印完成时间长达1s,最后一列中的每个数据的打印速度都很慢特别是最后的数据在倒数第二次打印之后,以约3-4s的速度打印。 原因是大量的递归调用会建立函数的副本,会耗费大量的时间和内存。而迭代则不需要反复调用函数和占用额外的内存

请注明出处:

3358 blog.csdn.net/daijin 88888/article/details/70157153

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。