使用递归反转并打印出数组的内容

时间:2018-09-25 19:54:10

标签: c++ arrays recursion

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

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

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

1 个答案:

答案 0 :(得分:1)

如果假定同一函数是反向函数,然后打印该序列,则可以通过仅在递归调用堆栈的最外层调用中满足条件的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';
    }
}

值得一提。 sizeofArrayhigh在此代码中毫无意义。您不需要两者。您可以轻松地做到这一点,例如:

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解决方案)。