首页 > 解决方案 > 使用递归反转并打印出数组的内容

问题描述

我需要使用递归反转并打印出以下数组的内容:

int myArray[] = { 65, 89, 74, 25, 21, 54, 38, 64, 11, 45, 19, 48, 46, 83 };

该函数的调用是:

printArray(myArray, arraySize, 0, arraySize - 1);

我的功能是:

void printArray(int values[], int sizeOfArray, int low, int high) {
    if (low < high) {
        int tempValue = values[low];
        values[low] = values[high];
        values[high] = tempValue;
        printArray(values,sizeOfArray, low+1 ,high-1);
    }
    for (int i = 0; i < sizeOfArray; i++) {
        cout << values[i]<<' ';
    }
}

我得到的输出是反转数组总共 8 次。

83 46 48 19 45 11 64 38 54 21 25 74 89 65 83 46 48 19 45 11 64 38 54 21 25 74 89 65 83 46 48 19 45 11 64 38 54 21 25 74 89 65 83 46 48 19 45 11 64 38 54 21 25 74 89 65 83 46 48 19 45 11 64 38 54 21 25 74 89 65 83 46 48 19 45 11 64 38 54 21 25 74 89 65 83 46 48 19 45 11 64 38 54 21 25 74 89 65 83 46 48 19 45 11 64 38 54 21 25 74 89 65

我似乎无法弄清楚这里出了什么问题。我也是数组和递归的新手,因此非常感谢任何帮助。

标签: c++arraysrecursion

解决方案


如果假设相同的函数反转,然后打印序列,您可以通过在 for 循环周围加上一个仅在递归调用堆栈的最外层调用为真的条件来实现。

void printArray(int values[], int sizeOfArray, int low, int high) 
{
    if (low < high) 
    {
        int tempValue = values[low];
        values[low] = values[high];
        values[high] = tempValue;
        printArray(values, sizeOfArray, low+1 ,high-1);
    }
    if (low == 0)
    {
        for (int i = 0; i < sizeOfArray; i++)
            std::cout << values[i]<<' ';
        std::cout << '\n';
    }
}

值得注意。sizeofArray, 或high, 在这段代码中没有意义。你不需要两者。你可以很容易地做到这一点,例如:

void printArray(int values[], int low, int high)
{
    if (low < high)
    {
        int tempValue = values[low];
        values[low] = values[high];
        values[high] = tempValue;
        printArray(values, low+1 ,high-1);
    }
    if (low == 0)
    {
        for (int i = 0; i <= high; i++)
            std::cout << values[i]<<' ';
        std::cout << '\n';
    }
}

或者

同样,您可以使用模板在编译时收集本机数组大小(我将其留作将来的练习,因为现在它可能更像是 Rube Goldberg 解决方案而不是其他任何东西)。


推荐阅读