递归算法设计规则

设计递归算法应牢记四大基本规则:


  • 基准情形(必须要有某些基准情况,它不需要递归就能求解出答案)

例如: f(x)=2*f(x-1)+x^{2} 这个函数需要求解必须要有一个已知条件比如f(0)=0

如果没有一个已知条件这个函数是无意义的! 它的递归实现如下:

private int f(int x){
    if (x==0)
        return 0; 
    else
        return 2*f(x-1)+x*x;
}

 f(0)=0 就是这个递归方法的基准情况,没有f(0)=0这个基准情况这个方法会一直调用下去直到内存溢出程序崩溃.

  • 不断推进(递归调用必须总能朝着一个基准情况推进)

例如:还是上述方法我们要求 f(-1) 那就必须求 f(-2)f(-2) 又需要 f(-3) 等等.....

这样不断调用下去还是一个结果堆栈溢出,所以推出递归递归调用必须总能朝着一个基准情况推进.

  • 设计法则(假设所有递归调用都能运行)

设计递归程序时一般没必要知道簿记管理的细节,不必追踪大量的递归调用

递归的主要问题隐含的簿记开销,虽然这些开销几乎总是合理的(因为递归程序不仅简化了算法还有利于代码的整洁),但是递归绝不应该作为简单for循环的代替物

  • 合成效益法则(求解一个问题的同一实例时,切勿在不同递归调用中做重复的工作)

请听下回分解

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值