「递归」和「迭代」有哪些区别?

「递归」和「迭代」有哪些区别?

迭代是将输出做为输入,再次进行处理。比如将摄像头对着显示器;比如镜子对着镜子;比如KTV中将麦克对着音箱;比如机关枪扣动扳机发射子弹后,利用后座力继续扣动扳机。

用程序表述就是:for (int i=0; i < 100; i++) n = f(n);

比如下面这段生成分形图像的代码:

程序中迭代了100遍,迭代次数越多,生成的图像细节度越高。

再给迭代举个通俗点的例子:假如你有一条哈士奇和一条中华田园犬,怎么让它们串出比较纯正的哈士奇呢?先让哈士奇与中华田园犬配对,生下小狗。再让哈士奇与小狗配对,当然要等小狗长大后。就这样一直让哈士奇与新生的小狗配对,一代一代地迭,最终你能得到比较纯正的哈士奇。如果你纠结猫三狗四,猪五羊六,牛七马八这样的自然规律,不妨把两条狗改为老鼠与宠物仓鼠,他们一个月就能迭代一次。

递归,简讲就是自己调用自己,自己包含自己。

用程序表述就是:void f(int n){f(n - 1);}不要在意这是死循环代码,只需知道这个函数中,又调用了函数自身,属于自己调用自己。

比如,显示器中的显示器,镜子中的镜子。我前面写着:摄像头对着显示器,镜子对着镜子是迭代,怎么现在又改成递归了?这不矛盾,因为摄像头对着显示器,镜子对着镜子这种行为是输出做为输入,再次进行处理,所以是迭代。显示器中的显示器,镜子中的镜子这种效果是自己包含自己,所以是递归。如同上面那幅图像,生成它的代码是迭代,而分形的效果是递归。