【发布时间】:2020-02-06 13:43:33
【问题描述】:
对递归函数进行包装的目的是什么? 为什么不能直接从主函数调用递归函数呢? 我遇到过一些解释说包装函数有助于更好地传递参数 - 我不明白这一点。
编辑: 考虑一个基于二分搜索的函数的例子,它返回一个峰值元素的索引:
int findPeakUtil(int arr[], int low,
int high, int n)
{
// Find index of middle element
int mid = low + (high - low)/2;
// Compare middle element with its neighbours (if neighbours exist)
if ((mid == 0 || arr[mid - 1] <= arr[mid]) &&
(mid == n - 1 || arr[mid + 1] <= arr[mid]))
return mid;
// If middle element is not peak and its
// left neighbour is greater than it,
// then left half must have a peak element
else if (mid > 0 && arr[mid - 1] > arr[mid])
return findPeakUtil(arr, low, (mid - 1), n);
// If middle element is not peak and its
// right neighbour is greater than it,
// then right half must have a peak element
else return findPeakUtil(arr, (mid + 1), high, n);
}
// A wrapper over recursive function findPeakUtil()
int findPeak(int arr[], int n)
{
return findPeakUtil(arr, 0, n - 1, n);
}
为什么推荐使用包装函数?
【问题讨论】:
-
你能举个例子吗?
-
有时为了简单起见使用包装器,例如删除否定或任何东西,以便在递归函数本身中进行较少的检查。这取决于上下文。如果你提供一个例子,有人可能会解释它的目的。
-
谁是“我们”,为什么你认为不能直接调用递归函数?
标签: c++ function recursion wrapper