2016-03-20 19 views
-2

Burada yanlış yere gittiğimi göremiyorum, bazı palindromlar için çalışıyor ancak başkaları için çalışmıyor. Temel olarak, program bir kelimeyi, kelimenin uzunluğunu alır ve sonra bir palindromsa veya bir palindrom değilse geri döner ve işlev yinelemeyi kullanmalıdır.Yineleme kullanarak Palindrome işlevi

bool palindrome(char a[],int length){ 
int start = *a; 
if (*a != a[length-1]) 
    return false; 

if (*a == a[length-1]||start<length) 
    return true; 

else 
    return palindrome(a+1,length-1); 

return false; 
} 

Bu işlevle ilgili herhangi bir sorun gören var mı?

+1

deneyin (https://en.wikipedia.org/wiki/Rubber_duck_debugging): Sonra bana bunu gösterdi. Bu çok kısa bir kod parçası, uzun sürmemeli. Lastik ördekinizin problemi çözeceği herhangi birşeye bahse girerim. Heck, lastik ördekim problemi beş saniyede buldu. –

+0

haha, aptalca bir şeymiş gibi hissediyorum, şimdi lastik ördekimi aldırım – owen95

cevap

0

Ördekim çok yakın olduğunu söylüyor. start ile yapmaya çalıştığınız her şeyi unutmanız gerektiğini ve her bir yinelemenin uzunluğu 2'ye değil, 1'i azalttığına (ilk karakter eşleşmesiyle, son karakterle eşleştiğinden) gerek duyduğunuzu söylüyor. [Senin lastik ördek için kodun her satırını açıklayan]

bool palindrome(const char* a, int length) { 
    if(length < 2) return true; 
    if(a[0] != a[length-1]) return false; 
    return palindrome(a+1, length - 2); 
} 
+0

Kendimi orada buldum! Aptal hata, ördeklerine söyle! – owen95

+0

"Quack!" Diye cevap verdi. –