递归真是“懒人”的好东东

这几个星期来一直在递归里折腾,发觉它还真是一个好东东,对于“懒人”来说。当然这个懒人打上了引号,并不是真正的懒,而是在看清问题本质后用最简洁的方式表达出来让计算机去执行。她比起非递归,更加显得浅显,但是却不是那么易懂。而有些复杂问题的非递归方法,看得很明白,但是绕了太多的弯后突然发现不了自己思维的轨迹了,回去一两步可能还找的到,但是再多些就没印象了,完全被里面的各种运算所掩埋,看不清~~。

递归发现了些东东:

 

int Countnode(Property *T,int *i)

{

if(T!=NULL){

(*i)++;

Countnode(T->firstchild,i);

Countnode(T->nextsibling,i);

}

}

 

此处用了递归的便利,同时外部传入地址,通过这个递归过程去改变此地址所在单位的值,以此达到计数的目的,很好,很明白。

另外我从网络上看到的一种方法:

void binarytree_count(BinaryTree *root)
{
 BinaryTree *node;int count;
 /*使用辅助队列,设进队函数为void in(BinaryTree* Node),出队函数为BinaryTree *out(),判断队列空的函数int isempty()*/
 in(root)
 while(!isempty())
 {
  node=out();
  if(node->left!=null) in(node->left);
  if(node->right!=null) in(node->right);
  if(node->left!=null||node->right!=null) count++;
 }
 return count;
}

通过队列的方式来实现,看来也很好,但是简洁性好像没上面那么高。各有千秋~~(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值