分段故障

时间:2011-03-26 11:21:38

标签: c

#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;
}

1 个答案:

答案 0 :(得分:2)

尝试替换它:

else return (test(ch,i++,j--));

......用这个:

else return (test(ch,i+1,j-1));

在进行该调用时,无需再分配回'i'和'j',因为您不会在同一个函数调用中再次引用它们。此外,i++评估i的原始值,而不是i + 1的值(这是您想要的)。

因此,您的原始代码永远不会实际修改ij,这会导致它无限递归并导致堆栈溢出(所以我无法相信有人说这不是适合SO)。