在C中向后递归打印

时间:2014-04-03 16:08:47

标签: c

尝试递归并尝试此练习向后打印一个单词。我究竟做错了什么?

#include <stdio.h>
#include <stdlib.h>


void recursivePrint(char* x){

    if (*x = '\0')
        return;
    else
        recursivePrint(x++);
        printf("%c", *x);

}

int main()
{
    char x[10] = "Hello";

    recursivePrint(x);
    return 0;
}

4 个答案:

答案 0 :(得分:6)

=是一个赋值运算符。 ==用于比较。 变化

if (*x = '\0')

if (*x == '\0')

修改

要查看第一个字符,

更改

void recursivePrint(char* x){
    if (*x == '\0')
        return;
    else
        recursivePrint(x++);
    printf("%c", *x);
}

void recursivePrint(char* x){
    if (*x == '\0')
        return;
    else
        recursivePrint(x+1);
    printf("%c", *x);
}

答案 1 :(得分:3)

除了要进行比较的赋值(在另一个答案中指出)之外,您不应该递增x,因为您希望在递归调用之后输出它。增加x是不必要的,因为您可以看到容易出错。发生的事情是电话号码i是打印字符i+1,所以倒数第二个呼叫实际上是将空终止符传递给printf();倒数第三个是在NULL之前传递字符,等等。看起来像这样:

recursivePrint("Hello");
    recursivePrint("ello");
        recursivePrint("llo");
            recursivePrint("lo");
                recursivePrint("o");
                    recursivePrint("");
                        return;
                    /* x was incremented, points to \0 */
                    print '\0'
                /* x was incremented, points to "o" */
            /* ... */

所以基本上,你总是比想要打印的人物要早一个角色。你可以通过将x[-1]传递给printf()来修复它,但这很难看。更好的方法是:

void recursivePrint(char *x) {
    if (*x == '\0')
        return;

    recursivePrint(x+1);
    printf("%c", *x);

}

这是更好的,因为你从来没有想过/需要首先增加x

答案 2 :(得分:1)

试试这个

void recursivePrint(char* x){
    if (*x == '\0')
        return;
    recursivePrint(x+1);
    printf("%c", *x);

}

答案 3 :(得分:1)

你很接近,但这里的一些答案不正确并产生了段错误。

#include <stdio.h>
#include <stdlib.h>

void recursivePrint(const char *x) {
   if (*x == '\0') {
      return;
   }
   recursivePrint(x+1);
   printf("%c", *x);
}

int main(void) {
   const char* x = "Hello";
   recursivePrint(x);
   return 0;
}

您应该使用const char*,因为您的功能不会修改数据。