输出字符串的递归函数
Recursive function for outputing string
我有以下代码:
#include <stdio.h>
void recursion(char *ptr) {
if(*ptr!='J') recursion(ptr++);
printf("%c",*ptr);
}
void main() {
char v[]="!zenaJ";
char *ptr=v;
recursion(ptr);
}
我要returnJanez!通过递归函数。编译时我没有任何错误。当我 运行 程序时,我收到错误“分段错误(核心已转储)”。我做错了什么?
您正在递归传递相同的指针
if(*ptr!='J') recursion(ptr++);
因为post自增表达式ptr++
的值是指针自增前的值
用C写的函数如下所示
void recursion( const char *ptr )
{
if ( *ptr )
{
recursion( ptr + 1 );
putchar( *ptr );
}
}
在 C++ 中,函数可以如下所示
std::ostream & recursion( const char *ptr, std::ostream &os = std::cout )
{
if ( *ptr )
{
recursion( ptr + 1 );
os << *ptr;
}
return os;
}
注意根据C标准,不带参数的函数main应该声明为
int main( void )
在 C++ 中它可以声明为
int main()
ptr 的增量仅发生在 对 recursion
的递归调用之后。
一个简单的修复应该是:
#include <stdio.h>
void recursion(char *ptr) {
if (*ptr != 'J')
{
char c = *ptr;
ptr++;
recursion(ptr);
printf("%c",c);
}
else
{
printf("%c", 'J');
}
}
void main() {
char v[]="!zenaJ";
char *ptr=v;
recursion(ptr);
}
我有以下代码:
#include <stdio.h>
void recursion(char *ptr) {
if(*ptr!='J') recursion(ptr++);
printf("%c",*ptr);
}
void main() {
char v[]="!zenaJ";
char *ptr=v;
recursion(ptr);
}
我要returnJanez!通过递归函数。编译时我没有任何错误。当我 运行 程序时,我收到错误“分段错误(核心已转储)”。我做错了什么?
您正在递归传递相同的指针
if(*ptr!='J') recursion(ptr++);
因为post自增表达式ptr++
的值是指针自增前的值
用C写的函数如下所示
void recursion( const char *ptr )
{
if ( *ptr )
{
recursion( ptr + 1 );
putchar( *ptr );
}
}
在 C++ 中,函数可以如下所示
std::ostream & recursion( const char *ptr, std::ostream &os = std::cout )
{
if ( *ptr )
{
recursion( ptr + 1 );
os << *ptr;
}
return os;
}
注意根据C标准,不带参数的函数main应该声明为
int main( void )
在 C++ 中它可以声明为
int main()
ptr 的增量仅发生在 对 recursion
的递归调用之后。
一个简单的修复应该是:
#include <stdio.h>
void recursion(char *ptr) {
if (*ptr != 'J')
{
char c = *ptr;
ptr++;
recursion(ptr);
printf("%c",c);
}
else
{
printf("%c", 'J');
}
}
void main() {
char v[]="!zenaJ";
char *ptr=v;
recursion(ptr);
}