浅析递归算法

递归就是把一个大的事物化成若干个小的事物,每一次使用的方法都相同。
例如将一根木棍截为相同的若干小份,肯定是先从中间截断,再将两个已截完的A1,A2从中间截断并依次下去。
专业的定义:
程序自身调用自身的编程技巧称为递归( recursion)。递归有直接递归和间接递归
•直接递归:函数在执行过程中调用本身。
•间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。
递归有四个特性:
1.必须有可最终达到的终止条件,否则程序将陷入无穷循环;
2.子问题在规模上比原问题小,或更接近终止条件;
3.子问题可通过再次递归调用求解或因满足终止条件而直接求解;
4.子问题的解应能组为整个问题的解。

int GetHeight( BinTree BT )
{
int m=0,n=0;
if(BT==NULL) return 0;
else
{
m = GetHeight(BT->Left);
n = GetHeight(BT->Right);
if(m>n) return (m+1);
else return (n+1);
}
}

二叉树

上面是求二叉树的高度用到递归算法和一个二叉树图,我们这样想,求整个数的高度不好求,可以先求左右子树的高度。以上图与代码,从m = GetHeight(BT->Left);
n = GetHeight(BT->Right);处就开始将整个问题细分,分到最后,没有左右子树的结点会有m = n = 0;这时返回n+1=1;再往上回顾,一直看就得出根处的m或n的值,即为树的高度。

换个例子汉偌塔,也是先将n-1个移到B,将最大的移到C,再去考虑n-1个的细分,直到分为两个可解。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值