C++回文创建者递归程序

C++ Palindrome Creator Recursion Program

本文关键字:程序 递归 创建者 回文 C++      更新时间:2023-10-16
#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;
}

我必须创建一个递归函数,将任何字符串转换为回文。这是一个家庭作业问题,我唯一可以修改的代码是在回文函数中。这段代码几乎可以工作。问题是它返回"foobaraboo"并省略最后一个字母。有什么提示可以指出我正确的方向吗?我已经玩了一段时间的代码,似乎不知道如何更改它,所以回文的最后一个字符出现了。

你的

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

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

这应该是:

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

如果你的整个输入是字符串"x",你的预期结果是回文"xx",但这个错误将导致打印一个空字符串。

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

cout << s[0];
palindrome(++s);
cout << s[0];
您在此处的目的是打印当前字符,递归打印回

文字符串的其余部分,然后重新打印相同的字符。

但是由于++,你第二次打印了错误的字符。

这应该是:

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

编辑:有人提出了一个问题,是否要打印两次最后一个字符。如果不是,那么这应该是:

cout << s[0];
if (s[1])
{
    palindrome(s+1);
    cout << s[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