递归返回和基本流程应该怎么理解?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (221)

我无法理解程序在递归中的流程,有无返回。如何返回或打印由函数计算的值组?例如,要计算数组中所有的峰值元素,我使用了递归,但是我无法得到如何给这些值作为结果。基本上我不清楚如果我写或不递归函数之前写return会发生什么。

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);
    }
}
提问于
用户回答回答于

至少有两种方法可以解决问题。

第一个示例使用循环来计算峰的总和:

int peak_sum(int arr[], int size)
{
    int sum = 0;

    // for each value in array
    for (int i = 1; i < size - 1; i++) {
        // if current value is peak
        if(arr[i] > arr[i+1] && arr[i] > arr[i-1]) {
            cout << arr[i];
            // then we add it to total sum of peaks
            sum += arr[i];
        }
    }

    // after all we return this sum of peaks
    return sum;
}

但是如果想以递归的方式解决它,那么可能看起来像这样:

int peak_sum(int arr[], int size, int current_index, int sum)
{
    // if index in bounds
    if ((current_index > 0) && (current_index < size - 1)) {
        // if current value is peak
        if(arr[i] > arr[i+1] && arr[i] > arr[i-1]) {
            cout << arr[i];
            // then we add it to total sum of peaks
            sum += arr[i];
        }

        // anyway we check next value of array
        // by incrimeting `current_index`
        return peak_sum(arr, size, current_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;
        }
    }
}

所属标签

可能回答问题的人

  • 不吃貓的鱼oo

    5 粉丝466 提问6 回答
  • Richel

    8 粉丝0 提问4 回答
  • 御姐万岁

    6 粉丝507 提问3 回答
  • 人生的旅途

    10 粉丝484 提问3 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励