2017-04-07 58 views
0

這是什麼基礎案例?這是完全正常的,但它是如何工作的?這個遞歸函數的基本情況是什麼?它的工作原理是什麼?

int isPali(char *s, int l, int r) 
{ 
return ((l == r) || (s[l] == s[r] && isPali(s, l+1, r-1))); 
} 
int main() 
{ 
char str[100]; 
scanf("%s", str); 

if(isPali(str, 0, strlen(str)-1)) 
printf("Palindrome\n"); 
else 
printf("Not palindrome\n"); 
} 
+0

步驟通過它在調試器中找到答案。 –

+0

''l == r''是基本情況 - 但我認爲這需要是''l> = r'':正如所寫,長度爲偶數的字符串將失敗,因爲左側和右側索引會相互傳遞沒有變得平等。 – jasonharper

回答

0

它在函數的唯一行中。記住表達式中的短路邏輯。該可以改爲

if (l == r) 
    return True; 
else 
    return (s[l] == s[r] && isPali(s, l+1, r-1)); 

當然,你現在就可以申請短路到其它部分

else 
    if s[l] == s[r] 
     return isPali(s, l+1, r-1); 
    else 
     return False; 
相關問題