C++回文创建者递归程序
C++ Palindrome Creator Recursion Program
#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
相关文章:
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 递归程序的执行流程
- 递归程序获得勒让德多项式
- 当有 2 个或更多递归函数写入 togeather 时,程序如何执行?
- 递归导致程序崩溃,但 while 循环中的相同概念不是来自C++析构函数
- 这个简单的程序如何不表示递归?
- 执行递归函数时 C++ 应用程序崩溃
- 如何理解哪个递归函数程序需要
- 以下递归程序的最后一行是如何工作的
- 如何使用mongocxx c ++驱动程序递归生成Mongodb文档?
- C 程序.该程序应使用递归和循环
- 具有递归函数且不带全局变量的程序 - C++
- 输出中的特定递归反向程序问题
- 生成给定集合的子集(使用递归)的程序的执行涉及哪些步骤
- 如何计算递归程序的步骤
- 为什么GCC在这个递归Fibonacci代码中生成的程序比Clang更快
- 以嵌套或递归方式(即在处理程序内)调用 asio io_service poll() 或 poll_one() 是否有效
- C++回文创建者递归程序
- 当我在递归函数中调用 return 时,我的程序意外完成
- 递归在这个快速排序程序中是如何工作的