C中的递归例程以反向打印字符串

时间:2017-09-11 05:00:12

标签: c string recursion

在下面的示例程序中,任何人都可以帮助解决2个函数输出之间的差异吗?

根据我的理解,两个函数的输出应该相同。

#include<stdio.h>
void printRevStr1(char *ptr)
{
        if(*ptr)
        {
                printRevStr1(ptr+1);
                printf("%c",*ptr);
        }
}
void printRevStr2(char *ptr)
{
        if(*ptr)
        {
                ptr++;
                printRevStr2(ptr);
                printf("%c",*ptr);
        }
}
main()
{
        char arr[100]="Stackoverflow";
        printRevStr1(arr);
        printf("\n");
        printRevStr2(arr);
        printf("\n");
}

以下是输出

输出

wolfrevokcatS
wolfrevokcat

2 个答案:

答案 0 :(得分:2)

它工作得很好......但是你正在推进和打印下一个角色,当它真的是你应该打印的前一个角色时:

void printRevStr2(char *ptr)
{
    if(*ptr)
    {
        ptr++;                   
        printRevStr2(ptr);
        printf("%c",*(ptr - 1)); // <----- here

    }
}

这给出了

wolfrevokcatS
wolfrevokcatS

答案 1 :(得分:2)

很简单。

请按功能检查以下说明:

void printRevStr1(char *ptr)
{
        if(*ptr)
        {
                printRevStr1(ptr+1);
                printf("%c",*ptr);
        }
}

当您实现此功能时,您输入的字符串为Stackoverflow 然后你只需反转字符串并打印它。

在第二个功能中:

void printRevStr2(char *ptr)
{
        if(*ptr)
        {
                ptr++;
                printRevStr2(ptr);
                printf("%c",*ptr);
        }
}

您在打印前编写的语句:ptr++;将指针移动到字符串中的下一个字符。那就是你现在的字符串变成tackoverflow

因此你收到了这样的输出。我希望这会对你有所帮助。