如何灵活应用理解递归

worldcup 2004-07-21 02:09:39
int Height(BinTree T)
  {
   int hl,hr;
   if(T)
    {//非空树
     if(t->lchild==NUll)&&(t->rchild==NULL)//只含一个根结点
      return 1;
     else
      {
       hl=height(t->lchild);//根的左子树高度
       hr=height(t->rchild);//根的右子树高度
       if (hl>=hr)
        return hl+1;
       else
return h2+1;
      }
    }
   else return 0;
  }

这是从网上抄的计算二叉树高度的代码,用的是递归方法,对于该类代码我能读懂,
可是如果让我去写,恐怕我写不了这么精妙,感觉就是转不过弯,因此请教大家:你
们是如何理解这种问题的??有什么好方法??
谢谢!!
...全文
209 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldcup 2004-07-26
  • 打赏
  • 举报
回复
谢谢大家,有点明白了,也就是将一个未知的"大"问题看成许
多已解决的相似的"小"问题组成,而其中最小最简单的那个问
题就作为递归的返回条件!
fulaoxiao3000 2004-07-22
  • 打赏
  • 举报
回复
递归并非效率高的方法。
它的优点在于其代码的简洁和易理解性。
它的实现实质上就是一个堆栈,可以用递推的方法实现递归。

。。。。。。。,应该说,递推比递归麻烦得多。
递归容易做到,递推却更难些,如果楼主的情况刚好相反,你应该感到自豪才是啊。
FlyNesta 2004-07-22
  • 打赏
  • 举报
回复
一个very simple的方法。
你先不去想递归,先按照最蠢的方法把每一步都枚举出来,多枚举几步,你就能找到需要递归的部分。

赫赫,这是我一直使用的法子,对于我这种不爱动脑的懒人比较管用:)
softworms 2004-07-22
  • 打赏
  • 举报
回复
递归就是不断调用自身,然后到某个状况后开始收敛的过程.
它适合将一个巨问题不断划归成多个小问题来处理.
比如从1一直加到100,你可能一时算不出来,可以先把1+2算出来,然后再考考虑其它.
但递归在解决太巨问题也有问题,如果问题太过复杂,调用自身过多,可能靠成栈溢出,这时就应该考虑使用非递归来解决.

建议楼主试试写一下递归搜索目录中所有文件的例程(包含子目录),看懂和学会是两个概念.
网上的例子虽多,但容易消化太少.
worldcup 2004-07-22
  • 打赏
  • 举报
回复
three star + one star + one star = five star
五星上将
谢谢
opentuxedo 2004-07-21
  • 打赏
  • 举报
回复
算不上精秒,可以去网上搜一些递归的例子,例如C++中的对#include的解析。JAVA中的正则表达式,都是不错的递归应用。
Pipi0714 2004-07-21
  • 打赏
  • 举报
回复
循环调用一个函数,而且循环条件与函数中的变量或者什么发生关系.
快乐鹦鹉 2004-07-21
  • 打赏
  • 举报
回复
递归的关键是你要想清楚,哪一部分你需要重复?这块重复的内容,就是递归要完成的

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧