这个递归函数(回文)变成了一个无限循环。为什么?

时间:2014-10-24 20:14:25

标签: c++ recursion infinite-loop palindrome

/ *但如果我将第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");
    }
}

2 个答案:

答案 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的递归调用永远不会增加。它会在函数调用后递增。在你的情况下永远不会。