#include <stdio.h>
#include <string.h>
int test(char ch [10],int i,int j )
{
if(i>=j) return 1;
else if (ch[i]!=ch[j]) return 0;
else return (test(ch,i++,j--));
}
int main ()
{
char ch[10];
int m,k;
printf("Donner une chaine de caracteres :\n");
scanf("%s",ch);
k=strlen(ch);
m=test(ch,0,k-1);
if (m==1) printf ("expression palindrome \n");
else printf ("expression non palindrome \n");
return 0;
}
答案 0 :(得分:2)
尝试替换它:
else return (test(ch,i++,j--));
......用这个:
else return (test(ch,i+1,j-1));
在进行该调用时,无需再分配回'i'和'j',因为您不会在同一个函数调用中再次引用它们。此外,i++
评估i
的原始值,而不是i + 1
的值(这是您想要的)。
因此,您的原始代码永远不会实际修改i
和j
,这会导致它无限递归并导致堆栈溢出(所以我无法相信有人说这不是适合SO)。