我的主要想法是从两边缩小它们的阵列。例如,如果输入是1234,则要打印1234然后打印4321(反转)。
#include <iostream>
#include <cmath>
#include <math.h>
using namespace std;
int reversedArray(int* x)
{
cout<< "*x out of while =" << *x <<endl ;
while( *x != 0 )
{
cout << "*x=" << *x << endl;
cout<< "====================== im in reversed =================" << endl ;
return reversedArray( x+1 );
}
cout<< "after return " << *x << endl;
}
int main ()
{
int Array[] = {10,2,3,4,8 ,0} ;
int* p_Array = Array;
reversedArray( Array );
}
在“while”之后,为什么堆栈中的函数不会返回到下一行(“ - &gt; cout&lt;&lt;”返回“&lt;&lt; * x&lt;
答案 0 :(得分:1)
void printReversed(int * x)
{
if (*x == 0) return;
std::cout << *x;
printReversed(x+1);
std::cout << *x;
}
答案 1 :(得分:1)
该行:
return reversedArray( x+1 );
退出该功能。因此,如果您进入while
,则永远不要重复while
或执行while
之后的任何代码。这使while
有效地成为if
语句。
答案 2 :(得分:1)
Crazy Eddie发布的代码完成了这项工作,而Barmar解释了while循环的无效性。我决定发布一种非递归方式来解决上面提到的问题。
#include <iostream>
#include <vector>
using namespace std;
vector<int> reverseArray(vector<int>& arr) {
vector<int> ans;
int n = arr.size();
// insert all elements in the reverse order
for (size_t i = 0; i < n; i++) {
ans.push_back(arr[n-i-1]);
}
return ans;
}
int main ()
{
int array[] = {10, 2, 3, 4, 8, 0};
// convert into vector
vector<int> arr(array, array+6);
vector<int> rev = reverseArray(arr);
// merging the 2 arrays
arr.insert(arr.end(), rev.begin(), rev.end());
// printArray(arr) -- implement to fit your needs;
}
答案 3 :(得分:0)
当您将int[]
传递给某个函数时,它会衰减到int*
,这只是内存中的一个地址。 C ++更好的计划是将copy_backward
与ostream_iterator
:
copy_backward(Array, Array + sizeof(Array) / sizeof(*Array), ostream_iterator<int>(cout, " "))
请注意,此方法使用数组的实际大小,并且不依赖于终端元素。因此,没有数字是非限制性的,并且由于未能提供终止元素而不可能出现段错误。
如果您可以访问C ++ 11,则可以进一步简化:
copy(crbegin(Array), crend(Array), ostream_iterator<int>(cout, " "))