我仍然对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)

我希望我能说清楚。

10-06 04:49