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”。編輯 - 對引數串列進行了少許更改。
uj5u.com熱心網友回復:
尚不清楚為什么使用 型別的物件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 );
}
}
uj5u.com熱心網友回復:
分而治之演算法的重點是在處理資料時將資料分解成越來越小的部分。
例如,如果要反轉陣列,則應該發生以下情況:
- 資料被分成兩等份,這些部分的順序被交換(所以后半部分變成前半部分,前半部分變成后半部分)
- 然后將 2 個拆分部分也分解為 2-2 個相等的部分,并反轉。
- 依此類推,直到拆分為 1 長度,因此它們不能再拆分,從而導致完全反轉的陣列。
閱讀有關 D 和 C 演算法的材料
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/482922.html
上一篇:根據子條件過濾嵌套的物件陣列
