簡體   English   中英

C ++:數組的遞歸函數

[英]C++: recursive function for array

我試圖以相反的順序寫數組的元素,我遇到了這個例子

template <class T>
void reverse(T arr[], int size)
{
    if (size>=2)
    {
        swap(arr[0],arr[size-1]);
        reverse(arr+1,size-2);
    }       
} 

我沒有得到第二行-為什么它們將數組的大小減去2? 如果我在“交換”函數中有10個元素,方法是將其減去1以將第一個元素與最后一個元素交換,然后再將其減去2將得到8,但再次將該大小放入“交換”函數中,我將得到7 ! 應該是8而不是7?

該函數的工作方式是交換數組的第一個和最后一個元素,然后對子數組從[1][size-2]遞歸地執行相同的操作,像這樣(示例假定一個包含7個元素的數組):

|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

由於交換了2個元素,並且現在處於所需順序,因此每個步驟的大小都會減小2。

我認為這段代碼是正確的。 讓我們看看如何使用4元素數組:[0,1,2,3]

第一次調用,arr = [0,1,2,3],大小=4。大小大於2,因此我們交換了第一個和最后一個元素。 arr = [3,1,2,0]。 現在是arr = [1,2,3]和size = 2的反向調用。將要做什么? swap(arr [0] = 1 ,arr [size-1 = 2-1 = 1 ] = 2 ]。新數組為[3,2,1,0]。第二行排除了數組的最后一個元素,已經完成了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM