在递归和基本流中返回
Return in Recursion and basic flow
我无法理解递归中的程序流程,有和没有返回。如何返回或打印函数计算的值组?例如,为了计算数组中的所有峰值元素,我使用了递归,但我无法得到如何给出这些值。基本上我不清楚如果我在递归函数之前写或不写返回会发生什么。
int peak(int arr[],int i,int size)
{
while(i<size)
{
if(arr[i]>arr[i+1]&&arr[i]>arr[i-1])
cout<<arr[i];
i++;
return peak(arr,i,size);
}
}
至少有 2 种方法可以解决您的问题。
第一个示例使用循环来计算峰值总和:
int peak_sum(int arr[], int size)
{
int sum = 0;
// check first element
if (arr[0] > arr[1]) {
std::cout << arr[0] << std::endl;
sum += arr[0];
}
// for each middle value in array
for (int i = 1; i < size - 2; i++) {
// if current value is peak
if(arr[i] > arr[i + 1] && arr[i] > arr[i - 1]) {
std::cout << arr[i] << std::endl;
// then we add it to total sum of peaks
sum += arr[i];
}
}
// check last element
if (arr[size - 1] > arr[size - 2]) {
std::cout << arr[size - 1] << std::endl;
sum += arr[size - 1];
}
// after all we return this sum of peaks
return sum;
}
但是如果你想以递归的方式解决它,那么它可能看起来像这样:
int
peak_sum(int arr[], int size, int index, int sum)
{
// if index in bounds
if (index < size) {
// if we on the first element
if (index == 0) {
// if first element more then next: it is peak
if (arr[index] > arr[index + 1]) {
std::cout << arr[index] << std::endl;
sum += arr[index];
}
// if we on the last element
} else if (index == size - 1) {
// if first element more then previous: it is peak
if (arr[index] > arr[index - 1]) {
std::cout << arr[index] << std::endl;
sum += arr[index];
}
// else we in the middle
} else {
// if current element more then previous and next: it is peak
if (arr[index] > arr[index - 1] && arr[index] > arr[index + 1]) {
std::cout << arr[index] << std::endl;
sum += arr[index];
}
}
// anyway we check next value of array
// by incrimeting current index
return peak_sum(arr, size, index + 1, sum);
} else {
// otherwise we end iterating array
return sum;
}
}
并用以下命令调用它:
// array, size of it, initial index, initial sum
peak_sum(arr, array_size, 0, 0);
如果您对代码流感兴趣:
//example for array_size == 3
if (index in bounds) {
index++;
if (index in bounds) {
index++;
if (index in bounds) {
index++;
if (index in bounds) {}
else return sum;
}
}
}
相关文章:
- 返回递归调用和仅递归调用的区别
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 如何在递归函数调用中返回当前函数值
- 在递归中返回完整值
- 递归函数的返回类型推导
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 返回未定义行为的递归行列式函数
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 从递归函数 C++ 返回多个值
- 递归返回可被给定整数 k 整除的位数
- 如何使用递归函数返回数组中整数的索引?
- 不理解此递归函数中的返回 (C++)
- C++ 递归:返回数字的最小偶数
- 递归函数始终返回 false
- 返回向量 C++ 上的递归
- 在递归和基本流中返回
- 从 C++ 中的函数返回递归 lambda
- 返回递归函数的bool意外地更改了变量
- c++中调用和返回递归函数的区别