2017-03-21 13 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が回文として出力されます。 私が取った基本ケースは、配列の開始時にnull要素が見つかった場合にtrueを返します。 else最初の要素と最後の要素が等しい場合、それはtrueを返し、再帰的に自身をpalindrome(input,siz,start+1)で呼び出す。そうでない場合はfalseを返す。再帰を使用して回文列を見つけるか?

答えて

1

問題を再実行する前に機能を終了していることが問題です。 今あなたが

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

代わりに、

return true; 

編集、追加、関数の最後に続いて

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

を試しています

私はそれをテストして、それを私のためにうまくいった、完全なコードはここにあります:

#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

このsould作品:

#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; 
} 
関連する問題