C ++ Palindrome Creator递归程序

时间:2016-03-31 23:24:16

标签: c++ recursion

#include <iostream>
using namespace std;


void palindrome(char *s){
    if (s[1] == 0)
    {
        return;
    }
    cout << s[0];
    palindrome(++s);
    cout << s[0];
}


int main(){
    char s[30]="foobar";
    palindrome(s);
    cout << endl;
}

我必须创建一个递归函数,将任何cstring转换为回文结构。这是一个家庭作业问题,我可以修改的唯一代码是回文功能。这段代码几乎可行。问题是它回归&#34; foobaraboo&#34;并留下最后一封信。有什么提示指出我正确的方向?我已经玩了很长一段时间了解代码并且似乎无法弄清楚如何改变它以便回文的最后一个字符显示出来。

2 个答案:

答案 0 :(得分:1)

你的逻辑中有两个错误。第一个:

if (s[1] == 0)
{
    return;
}

这应该是:

if (*s == 0)
{
    return;
}

如果您的整个输入是字符串&#34; x&#34;,您的预期结果是回文&#34; xx&#34;,但此错误将导致打印空字符串。

你还有一个更基本的错误:

cout << s[0];
palindrome(++s);
cout << s[0];

您的目的是打印当前字符,递归打印回文字符串的其余部分,然后重新打印相同的字符。

但是由于++ s,你第二次打印错误的角色。

这应该是:

cout << s[0];
palindrome(s+1);
cout << s[0];

编辑:一个问题是你是否想要打印最后一个字符两次。如果没有,那么这应该是:

cout << s[0];
if (s[1])
{
    palindrome(s+1);
    cout << s[0];
}

答案 1 :(得分:0)

你在这里

#include <iostream>

void palindrome( const char *s )
{
    if ( s[0] )
    {        
        std::cout << s[0];
        if ( s[1] )
        {            
            palindrome( s + 1 );
            std::cout << s[0];
        }
    }        
}

int main()
{
    const char *s = "foobar";
    palindrome( s );
    std::cout << std::endl;

}    

程序输出

foobaraboof