2017-03-21 56 views
0
bool palindrome(char input[], int siz, int start){ 
    // siz = size of the array ,start =starting point of the array ie 0 
    if(input[start] == '\0') { 
     return true; 
    } else if(input[start] == input[siz - start - 1]) { 
     return true; 
     palindrome(input, siz, start + 1); 
    } else { 
     return false; 
    } 
} 

我正在嘗試使用此遞歸函數來查找回文串,但代碼輸出術語alia作爲迴文,就好像它只檢查字符串的第一個和最後一個字母。 我採取的基本情況是,當在數組的開始處找到空元素時,它返回true。 否則,如果第一個和最後一個元素相等,則返回true,並遞歸調用palindrome(input,siz,start+1),否則返回false。使用遞歸找到迴文串?

回答

1

你的問題是,你再次執行它之前退出函數。 現在你有

else if(input[start]==input[siz-start-1]) 
     { 
      return true; 
      palindrome(input,siz,start+1); 
     } 

相反,嘗試

else if(input[start]==input[siz-start-1]) 
     { 
      palindrome(input,siz,start+1); 
     } 

然後在函數的末尾,添加

return true; 

編輯:

我測試了它和它對我來說工作得很好,下面是完整的代碼:

#include <iostream> 
bool palindrome(char input[],int siz,int start){ 
    //siz =size of the array ,start =starting point of the array ie 0 
    if(input[start]=='\0') 
    { 
     return true; 
    } 
    else if(input[start]==input[siz-start-1]) 
    { 
     palindrome(input,siz,start+1); 
    } 
    else 
    { 
     return false; 
    } 
    return true; 
} 
int main() 
{ 
    char racecar[] = "racecar"; 
    if (palindrome(racecar, 7, 0)) 
    { 
     std::cout << "It's a palindrome!" << std::endl; 
    } 
    else 
    { 
     std::cout << "It's not a palindrome." << std::endl; 
    } 
    char abba[] = "abba"; 
    if (palindrome(abba, 4, 0)) 
    { 
     std::cout << "It's a palindrome!" << std::endl; 
    } 
    else 
    { 
     std::cout << "It's not a palindrome." << std::endl; 
    } 
    return 0; 
} 
+0

它不工作 – bogor

+0

你有試了一次,因爲我加入了完整的代碼的編輯? – Jish

0

這要高度重視工作:

#include <iostream> 

bool isPalindromeRecursive(char* string, int begin, int end) 
{ 
    if (begin == strlen(string)/2) // There is no point in comparing chars past half of the string lenght 
    { 
     return true; 
    } 
    // Is the first char the same as the last char? <-- we call recursion based on that statement 
    return tolower(string[begin]) == tolower(string[end]) && isPalindromeRecursive(string, ++begin, --end); 
} 
bool isPalindrome(char* string) 
{ 
    return isPalindromeRecursive(string, 0, strlen(string)-1); // Let's ignore the null char (strlen(string)-1) 
} 


int main() 
{ 
    std::cout << isPalindrome("hooh") << std::endl; 
}