递归算法设计规则

本文阐述了设计递归算法的四大核心原则:基准情形、不断推进、设计法则及合成效益法则,强调递归调用必须有基准情况并朝着解决基准情况推进,避免重复工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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

例如: 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循环的代替物

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

请听下回分解

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值