我仍然对C++还是陌生的,到目前为止,我正在学习递归。我想以相反的顺序显示元素,而不必使用递归在末尾开始数组的索引。
显然,使用循环很容易,但是使用递归是另一回事。我在网上找到了解决问题的方法,但无法理解它如何能够准确打印出每个值。
void recArrayBackPrint(int array[],int size)
{
if (size > 0)
{
recArrayBackPrint(array+1,size-1);
cout << array[0] << " ";
}
// base case is empty array (size == 0), so do nothing
}
我知道在这种情况下,数组+ 1将引用位于当前元素+ 1处的内存地址。
int main() {
int values[5] = {1,2,3,4,5}
recArrayBackPrint(values,5);
}
我可以一直减小到大小为0,但仍然不知道如何打印出array [4],array [3] ..等。在我看来,它应该按下recArrayBackPrint并完成所有操作大小为0的方式,然后什么也不做。
那么,这到底是怎么回事?
最佳答案
第一次使用recArrayBackPrint
,它先打印{1,2,3,4,5}的第一个元素,然后再打印1。
但是在输出之前,它输入第二个recArrayBackPrint
来打印{2,3,4,5}的第一个元素,然后是2。
在输出2之前,第三个recArrayBackPrint
仍将在{3,4,5}中打印3。
并一直到最后一个recArrayBackPrint
,在{5}中打印5。
那么输出顺序为:
第5个recArrayBackPrint
(5)
第四recArrayBackPrint
(4)
第三recArrayBackPrint
(3)
第二个recArrayBackPrint
(2)
第一个recArrayBackPrint
(1)
我希望我能说清楚。