![](/img/trans.png)
[英]C++ - Why is the merge function reversing an array after recursively calling it?
[英]Reversing an array by recursively splitting the array in C++
string recursion(int arr[], int arrSize) {
if(arrSize == 1){
return to_string(arr[0]);
}
string letterLeft, letterRight, letterFull;
//logic1: Normal Recursion
//letterFull = to_string(a[n-1]) + " " + recursion(a, n-1);
//logic2: D&C ------------------------------------------------------ <
letterLeft += recursion(arr, arrSize/2);
letterRight += recursion(arr + arrSize/2, arrSize-arrSize/2) + " ";
letterFull += letterRight + letterLeft;
return letterFull;
}
我最近使用 'logic2: D&C' 遞歸地拆分數組以反轉它們(更像是分而治之)。
(即如果 2,5,4,1 作為輸入,輸出應該是 1,4,5,2)。
它通過了所有測試用例,就像我剛剛給出的示例一樣。 然而,我覺得我並不真正了解遞歸的流程。 如果可能的話,我在這里尋求某人的幫助,以逐步解釋“logic2:D&C”中發生的事情,並提供示例流程圖和值?
PS:
我從https://stackoverflow.com/a/40853237/18762063獲得幫助來實現這個“logic2:D&C”。 編輯 - 對參數列表進行了少許更改。
尚不清楚為什么使用std::string
類型的對象。 要反轉char
類型的對象數組,無需使用sdt::string
類。 這只是效率低下。 該功能可以如下所示
void recursion( char arr[], size_t arrSize )
{
if ( not ( arrSize < 2 ) )
{
std::swap( arr[0], arr[arrSize-1] );
recursion( arr + 1, arrSize - 2 );
}
}
分而治之算法的重點是在處理數據時將數據分解成越來越小的部分。
例如,如果要反轉數組,則應該發生以下情況:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.