递归算法的实现与优化
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
超级会员免费看
订阅专栏 解锁全文
3695

被折叠的 条评论
为什么被折叠?



