14、递归算法的实现与优化

递归算法的实现与优化

1. 递归与迭代实现的比较

递归调用通常用于保存局部变量的当前值,并在递归调用完成子任务时恢复这些值。由于局部变量分配在程序的栈上,每个递归实例都有一组独立的局部变量,因此递归调用会隐式地将变量值存储在程序的栈上。我们可以通过分配自己的栈并手动存储和检索局部变量值来消除对递归调用的需求。

不过,实现基于栈的交互式例程往往比使用递归调用实现等效例程要复杂得多。在 Java 或 C# 等语言中,基于栈的迭代实现递归算法并不比递归版本更高效。鉴于复杂度大幅增加,除非另有指示,否则应使用递归调用实现递归算法。

在面试中,优先考虑能解决问题的方案,高效方案次之。如果想到的是递归解决方案,可以向面试官提及递归解决方案固有的低效性。若递归和迭代解决方案复杂度相近,可向面试官同时提及,并表示选择迭代解决方案,因为它可能更高效。

2. 二分查找

二分查找是在有序整数数组中查找给定整数索引的常用方法。其基本思想是将排序搜索空间(这里是数组)的中心元素与要查找的项进行比较,根据比较结果缩小搜索范围。

2.1 递归实现
const int NOT_IN_ARRAY = -1;
const int ARRAY_UNORDERED = -2;
const int LIMITS_REVERSED = -3;
int binarySearch( int[] array, int lower, int upper, int target ){    
    int center, range;
    range = upper - lowe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值