我需要使用递归来反转并打印以下数组的内容:
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
我似乎无法弄清楚这里出了什么问题。我也是数组和递归的新手,因此非常感谢您的帮助。
答案 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';
}
}
值得一提。 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解决方案)。