我无法在我的代码中找到问题,只打印按任意键才能继续其他操作。由于显示的输出,我似乎没有弄清楚程序的流程。 帮助赞赏。
#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
答案 0 :(得分:2)
fcheck(name,i++,j--);
仅在调用i
后更改j
或fcheck
的值。这意味着您将获得fcheck(name,0,2)
的重复调用堆栈,该堆栈仅在堆栈溢出时终止。
如果你想在这里使用递归,你需要使用预增量/减量
return fcheck(name,++i,--j);
请注意,我还在这里添加了return
。如果没有这个,任何第一个和最后一个字符匹配的字符串都会被报告为回文。
答案 1 :(得分:1)
1)无限循环问题
这一行
fcheck(name,i++,j--);
应该是
fcheck(name,++i,--j);
,因为
fcheck(name,i++,j--);
相当于
fcheck(name,i,j);
i++;
j--;
因此,通过这种递增方式,您将获得无限循环,因为您正在使用相同的参数调用fcheck()
和
F确认(姓名,++ I, - J);
相当于
i++;
j--;
fcheck(name,i,j);
通过这种方式,您不会使用相同的参数回忆fcheck()
。所以它应该解决你的无限循环问题
2)应该在递归调用后添加return
如其他答案中所述,您应该在调用递归函数时添加return
return fcheck(name, ++i, --j);
答案 2 :(得分:0)
int fcheck(char *name, int i, int j){
if (i > j)
return 1;
if (name[i] != name[j])
return 0;
return fcheck(name, i+1, j-1);
}