3

这是一个简单的递归回文测试,它本身有效,但无论函数实际返回什么都返回 0。这是我的代码,我在调试 cout 语句时留下了,所以你可以看到它确实有效:

bool pal(int l, int r, char *a)
{
     if(l >= r)
     {
        cout << "returning true" << endl;
        return true;
     }

     if(a[l] != a[r])
     {
        cout << "returning false" << endl;
        return false;
     }
     pal(l+1, r-1, a);
}
4

3 回答 3

8

您的程序具有未定义的行为,因为有一条根本不返回的路径。您应该return在末尾添加一条语句:

return pal(l+1, r-1, a);
于 2012-11-14T23:02:17.707 回答
4
pal(l+1, r-1, a);

调用pal,但丢弃结果。它还会导致没有路径返回值的情况(检查您的警告!)。你想要的是:

return pal(l+1, r-1, a);
于 2012-11-14T23:02:27.570 回答
0

最后你需要一个 return 语句。因为如果函数没有进入 if 语句,就没有返回值。

它可能是这样的

return pal(l+1, r-1, a);
于 2012-11-14T23:35:08.400 回答