strlen function using recursion in c

时间:2016-06-10 10:03:47

标签: c recursion strlen

I'm kida new to the recursion subject and i've been trying to write the "strlen" function using recurion, thats what i tried:

int strlen ( char str[], int i)
{
    if ( str[i] == 0) return i+1;
    return strlen(str,i++);
}

and i tried something very similiar

int strlen( char str[], int i)
{
    if ( str[i] == 0) return 1;
    return strlen(str,i++) + 1;
}

and in my main function

int main()
{
     char word[MAX_DIGITS];
     scanf("%s",word);
     printf("%d", strlen(word,0));
     return 0;
}

but my program would crash whenever i run it, what am I missing? (I'm using C90 btw)

4 个答案:

答案 0 :(得分:3)

你的问题从这里开始:

i++

这称为后缀。 只需使用++ii + 1

即可

Postfix发送值,然后递增变量。这就像写这个:

return strlen(str,i);
i = i + 1;

您必须使用Prefix,它会增加变量,然后发送值。前缀(++i)的行为如下:

i = i + 1;
return strlen(str,i);

或者只是在不更改变量的情况下发送值:

return strlen(str, i + 1);

在我看来,这是最简单的方法。

答案 1 :(得分:3)

size_t strlen (char* str) {
    if (*str == 0) {
        return 0;
    }

    return strlen (str+1) +1;
}

所以:

  • strlen ("") == 0
  • strlen ("a") -> strln("") + 1 == 1
  • strlen ("he") -> strln("e") + 1) = (strln("") + 1) + 1 == 2

答案 2 :(得分:2)

return strlen(str,i++);

您正在使用错误的增量运算符。 i++表示i的原始值作为参数传递,然后递增。这意味着无限递归。

您应该尝试使用++i,或者更好,i + 1

答案 3 :(得分:2)

如果你想保持与strlen相同的原型。 这就是我看到一个递归的strlen。

size_t strlen(char *str)
{
    static int i = 0;

    if (*str != '\0')
    {
        i++;
        return ft_strlen(++str);
    }
    return i;
}

我知道这不是最好的方法。只是我的实施。