我正在學習編程入門課程,并且通過 myProgrammingLab 將大量材料鉆入我們的腦海。我在遞回的概念上遇到了一些麻煩......對我來說它有點被擊中或錯過。這個特殊的問題讓我很難過。當我提交代碼時,它為我提供
CTest1.cpp:在函式“bool isPalindrome(int*, int)”中:CTest1.cpp:9:錯誤:從“int”到“int*”的無效轉換 CTest1.cpp:9:錯誤:初始化“bool”的引數 1 isPalindrome(int*, int)'" 作為建議,我可以向你保證這不是很有幫助。大聲笑
我認為我的主要問題是何時進行實際的遞回。我知道有些事情不對勁,但是.. 如果您能指出我正確的方向,我將不勝感激。
'array palindrome' 是一個陣列,當它的元素被反轉時,保持不變(即,陣列的元素在向前或向后掃描時是相同的)
撰寫一個遞回的布林值函式 isPalindrome,它接受一個整數值陣列和元素數量,并回傳陣列是否為回文。
如果陣列為空(0 個元素)或僅包含一個元素(因此在反轉時相同),或者陣列的第一個和最后一個元素相同,并且陣列的其余部分相同,則陣列是回文(即,倒數第二個元素 ) 形成回文。
到目前為止我的代碼:
bool isPalindrome(int arr[], int n)
{
if (n == 0 || n == 1)
{
return true;
}
else if (arr[n-1] == isPalindrome(arr[((n-1) - n) 1 ], n))
{
return true;
}
else
{
return false;
}
}
uj5u.com熱心網友回復:
isPalindrome不接受 int 作為第一個引數。它只接受一個陣列,通過這樣做:如果一個整數陣列,arr[((n-1) - n) 1]你將給它一個int。這((n-1) - n) 1將評估為陣列中的“位置”,例如:arr[0]作為第一個元素,您的情況是 int。
uj5u.com熱心網友回復:
遞回主要有三個主要組成部分:
- 停止條件(當您達到足夠小的陣列大小以保證回文(
0或1)時), - 一個計算步驟(例如比較陣列的第一個和最后一個專案并確定繼續是否有意義)和
- 嵌套遞回呼叫的資料子集選擇(例如大小為 的陣列
n - 2,不包括第一個和最后一個字符,我們已經比較并發現“值得回文”)。
代碼中的三個組件:
bool isPalindrome(int arr[], size_t n) {
return n < 2 || (
arr[0] == arr[n - 1] &&
isPalindrome(arr 1, n - 2));
}
當然,您可能想稍微測驗一下函式(不要忘記在下面運行它valgrind):
#include <iostream>
int main() {
std::cout << isPalindrome((int[0]){}, 0) << std::endl;
std::cout << isPalindrome((int[1]){1}, 1) << std::endl;
std::cout << isPalindrome((int[2]){1, 1}, 2) << std::endl;
std::cout << isPalindrome((int[2]){2, 1}, 2) << std::endl;
std::cout << isPalindrome((int[2]){1, 2}, 2) << std::endl;
std::cout << isPalindrome((int[3]){1, 2, 1}, 3) << std::endl;
std::cout << isPalindrome((int[3]){2, 2, 2}, 3) << std::endl;
std::cout << isPalindrome((int[3]){2, 2, 1}, 3) << std::endl;
std::cout << isPalindrome((int[4]){1, 2, 1, 2}, 4) << std::endl;
std::cout << isPalindrome((int[4]){1, 2, 2, 1}, 4) << std::endl;
std::cout << isPalindrome((int[4]){1, 2, 3, 2}, 4) << std::endl;
std::cout << isPalindrome((int[4]){2, 3, 2, 1}, 4) << std::endl;
std::cout << isPalindrome((int[4]){1, 3, 3, 1}, 4) << std::endl;
}
作為旁注,這個 ^^^ 與陣列的致命斗爭表明不同的資料型別將是更好的選擇。例如,std::string或者std::vector可以初始化方式更簡單,應該按參考傳遞,并作為獎金,STL容器隨身帶大小資訊。此外,您可以在遞回中使用std::string_view子字串和std::span“子向量”,而無需在每個遞回級別上一遍又一遍地復制容器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/335029.html
