输出字符串的递归函数

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);
}