C语言,迭代与递归

版权声明:当当当 https://blog.csdn.net/qq_43001579/article/details/81940038

概念

迭代(iteration)是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
递归( recursion)是程序调用自身的编程技巧。

*迭代跟递归本质都是一种方法。而递归函数顾名思义,这个函数运用了递归这个方法。


个人理解

迭代:通过循环不断重复一个过程,这个过程是一个或若干个旧值通过该过程获得一个或若干个新值的过程,而得到的新值又充当下一个相同过程的旧值,直到循环得到自己期望的结果。循环执行一次过程就是一次迭代。**迭代不是循环,迭代需要用到循环。
它的特点是,一个过程结束后再次进行该过程。
它的思路是,从前往后推理。

打个比方,文件夹A里有一个文件夹B,文件夹B中有一个文件夹C,文件夹C中有一个文件夹D。想要得到文件夹D,我们的方法是打开文件夹A得到文件夹B,打开文件夹B得到文件夹C,打开文件夹C得到文件夹D。

//过程是 文件夹 = 文件夹 + 打开文件夹

文件夹B = 文件夹A + 打开文件夹
文件夹C = 文件夹B + 打开文件夹
文件夹D = 文件夹C+ 打开文件夹

所谓从前往后推理,就是通过A找到B,通过B找到C,通过C找到D。

等号右面的文件夹指的是需要打开的文件夹(旧值),等号左面的文件夹指的是通过打开旧文件夹操作得到的文件夹(新值)。打开旧文件夹得到新文件夹就是一次迭代过程。


个人理解

递归:执行一个过程中需要再次调用该过程。
它的特点是,一个过程运算中再次用到该过程。*
他的思路是,从后往前推理。

还是以上一个比方为例。

//过程是 文件夹 = 文件夹 + 打开文件夹

文件夹D = (文件夹C = (文件夹B = 文件夹A + 打开文件夹) + 打开文件夹) + 打开文件夹

所谓从后往前推理,想要找到D就要找到C,而想要找到C就要找到B,而想要找到B就要找到A。


迭代与递归
1.递归中一定有迭代,迭代中不一定有递归。(记住,感兴趣可取找一些递归,迭代试一下)
2.能用迭代就别用递归。递归容易造成溢出​。
为什么?
还是以上个比方为例,迭代执行到最后一步就只需计算

文件夹D = 文件夹C+ 打开文件夹

而递归执行到最后一步

文件夹D = (文件夹C = (文件夹B = 文件夹A + 打开文件夹) + 打开文件夹) + 打开文件夹

迭代和递归的次数越多,我们会发现迭代依然只需要一个简单的式子,而递归式子会越来越长。
在纸上写下这两个式子,是不是发现递归式子占用的地方大?在计算机中内存也是同样的道理。

溢出,这里简单来说就是,内存就这么大小,递归次数越多,式子越长,占用的内存越多。当式子长到内存放不下了,就溢出了。

为什么还要用递归:采用递归编写程序能使程序变得简洁和清晰。现代程序要求高可读性与低资源占用,递归完全违反了这两点,所以一般运用在不太占用资源且很普遍运用的地方。

※借鉴网上资料与自己总结,如有错误或建议,望提出,我会加以修改或补充,感谢。

猜你喜欢

转载自blog.csdn.net/qq_43001579/article/details/81940038