我在我的代码中找不到问题,它只打印按任意键继续任何其他操作。由于显示的输出,我似乎没有弄清楚程序的流程。 感谢帮助。
#include<stdio.h>
#include<stdlib.h>
int fcheck(char *name, int i, int j)
{
if (i > j)
return 1;
if (name[i] != name[j])
return 0;
else
fcheck(name, i++, j--);
return 1;
} // close fcheck
int main()
{
int c;
char name[] = "mom";
int i = 0, j = 2;
c = fcheck(name, i, j);
if (c == 1)
printf("Palindrome");
else
printf("Not a Palindrome");
return 0;
} // close main
最佳答案
fcheck(name,i++,j--);
仅在调用fcheck
后更改i
或j
的值。这意味着您会得到一个重复的 fcheck(name,0,2)
调用堆栈,它只会在您的堆栈溢出时终止。
这里如果要使用递归,需要使用预自增/自减
return fcheck(name,++i,--j);
请注意,我还在此处添加了一个return
。如果没有这个,任何第一个和最后一个字符匹配的字符串都将被报告为回文。
关于代码没有正确输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406308/