/ *但如果我将第13行更改为"否则返回回文(s,++ f, - l);"然后代码运行良好。这是什么原因?* /
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int palindrome(char* s, int f, int l) // f = first index, l = last index;
{
if(f>=l) return 1;
else if(s[f]!=s[l]) return 0;
else return palindrome(s, f++,l--);
}
int main()
{
char a[100];
gets(a);
int len = strlen(a)-1;
printf("len: %d\n",len);
int b = 0;
if(palindrome(a, b , len))
{
printf("Plindrome\n");
}
else
{
printf("not palindrome\n");
}
}
答案 0 :(得分:3)
签名
int palindrome(char* s, int f, int l)
并致电
f = first index, l = last index;`
错了
++f
/ --l
对递归没有影响,除非您要将其作为参考参数传递:
int palindrome(char* s, int& f, int& l)
// ^ ^ Add a reference, if you're intending to change
// the parameter value
答案 1 :(得分:0)
让我猜一下。这是
palindrome(s, f++, --l)
这意味着对于回文f的递归调用永远不会增加。它会在函数调用后递增。在你的情况下永远不会。