Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:数组的递归函数_C++_Arrays_Recursion_Reverse - Fatal编程技术网

C++ C++;:数组的递归函数

C++ C++;:数组的递归函数,c++,arrays,recursion,reverse,C++,Arrays,Recursion,Reverse,我试图以相反的顺序编写数组元素,我遇到了这个例子 template <class T> void reverse(T arr[], int size) { if (size>=2) { swap(arr[0],arr[size-1]); reverse(arr+1,size-2); } } 模板 无效反向(T arr[],整数大小) { 如果(大小>=2) { 掉期(arr[0],arr[size-1])

我试图以相反的顺序编写数组元素,我遇到了这个例子

template <class T>
void reverse(T arr[], int size)
{
    if (size>=2)
    {
        swap(arr[0],arr[size-1]);
        reverse(arr+1,size-2);
    }       
} 
模板
无效反向(T arr[],整数大小)
{
如果(大小>=2)
{
掉期(arr[0],arr[size-1]);
反向(arr+1,尺寸2);
}       
} 
我没有第二行-为什么他们要用数组的大小减去2?
如果我在“交换”函数中有10个元素,通过减去1来交换第一个元素和最后一个元素,然后再减去2将得到8,但如果在“交换”函数中再次使用该大小,我将得到7!!它不是应该是8而不是7吗?

该函数通过交换数组的第一个和最后一个元素来工作,然后对子数组从
[1]
[size-2]
递归地执行相同的操作,如下所示(该示例假设数组具有7个元素):


| 01 2 3 4 5 6 |我认为这个代码是正确的。
让我们看看使用4元素数组[0,1,2,3]可以做什么

第一次调用,arr=[0,1,2,3],size=4。大小大于2,所以我们交换第一个和最后一个元素。arr=[3,1,2,0]。现在是arr=[1,2,3]和size=2的反向调用。 该怎么办?交换(arr[0]=1,arr[size-1=2-1=1]=2]。 新数组是[3,2,1,0]。
第二行排除数组的最后一个元素,该元素已经完成。

从何处获取7?如果
size
为10,
size-2
为8。
size-1
不修改
size
|0 1 2 3 4 5 6|  <-- the array as supplied to the function
 6|1 2 3 4 5|0   <-- swap [0] with [6], call recursively for 1..5
 6 5|2 3 4|1 0   <-- swap [1] with [5], call recursively for 2..4
 6 5 4|3|2 1 0   <-- swap [2] with [4], call recursively for 3..3
 6 5 4 3 2 1 0   <-- do nothing because the size is less than 2