| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1946 人关注过本帖
标题:尾部递归和迭代的区别
只看楼主 加入收藏
larryliu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:128
注 册:2011-9-30
收藏
 问题点数:0 回复次数:4 
尾部递归和迭代的区别
请教一个各位高手,递归和迭代怎么区分?(特别是尾部递归和迭代)最好有点小例子作解释~~
搜索更多相关主题的帖子: 最好 
2011-10-02 21:44
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
收藏
得分:0 
这个确实很难区分。
迭代中不一定有递归,但递归中一定有迭代,可说递归是迭代的一部分。
递归是简单的重复调用自己,而迭代则必须有新值出现,而且这个新值是由旧值得来的。
这是递归:
程序代码:
int recursion(int a)
{
    if(a>1)
    {return a=recursion(a-1);}
    else
    {return a;}
}
上面代码中的a-1,就是迭代,因为由上次的值,生成了新值。
这是没有递归的迭代,由iterative生成新值:
程序代码:
//迭代
int recursion(int a)
{
    if(a>1)
    {a=iterative(a-1);}
    else
    {return a;}
}
int iterative(int a)
{
    int temp=a;
    temp=temp*2;
    return temp;
}

大略就这个意思了,尾部迭代……嘿嘿……不会……

一个单片机就让我头疼不已~~~
2011-10-04 20:51
larryliu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:58
专家分:128
注 册:2011-9-30
收藏
得分:0 
回复 2楼 dreamofgod
但是有任何又这么说:不知道楼主为什么把这两个概念扯在一起,个人感觉它们没有太多的共同点,就比如有人问“走路和吃饭有什么区别”,我也不知道该怎么回答。
递归就是一个函数调用自己。尾递归也是递归(一个函数在最末尾的地方调用自己),只不过编译器可能会做优化。一旦优化成功,除了性能的提升之外,还可以避免堆栈溢出的情形。即使无限递归也不会造成溢出。
迭代应该是指多次计算,每次计算都更加的接近最终结果,因此,计算的次数增多了就能得到足够精确的近似值。迭代一般用循环来做,但没有规定不能用其它方法来做。比如,你可以用递归来做迭代
2011-10-04 23:10
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
收藏
得分:0 
“走路和吃饭有什么区别”这个例子我认为欠妥,换成“移动和走路有什么区别”应该更加确切。

递归必须有有新值生成,不然就没法自己退出了,所以说递归里有迭代。
正如你所说的,迭代也可以用循环来做,所以迭代的使用不一定有递归。

我表述里就这么多了……
收到的鲜花
  • larryliu2011-10-05 19:34 送鲜花  5朵   附言:原创内容

一个单片机就让我头疼不已~~~
2011-10-05 16:23
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
递归是分割子问题  迭代是把用子问题推出大问题

就像算法里面的 搜索 和 动态规划 一样

                                         
===========深入<----------------->浅出============
2011-10-06 16:21
快速回复:尾部递归和迭代的区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047226 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved