strlen function using recursion in c

跟風遠走 提交于 2019-12-20 06:19:19

问题


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)


回答1:


Your problem starts here:

i++

This is called a postfix. Just use ++i or i + 1

Postfix sends the value and just then increments the variable. It's like writing this:

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

You have to use Prefix, which increments the variable and then sends the value. A prefix (++i) will act like that:

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

Or just send the value without changing the variable:

return strlen(str, i + 1);

Which, in my opinion, is the simplest way to do that.




回答2:


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

    return strlen (str+1) +1;
}

So :

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

etc




回答3:


return strlen(str,i++);

You are using the wrong increment operator. i++ means the original value of i is passed as argument, and then it's incremented. That means infinite recursion.

You should try ++i instead, or better, i + 1.




回答4:


If you want to keep the same prototype as strlen does. This is how i see a strlen with recursion.

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

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

I know it's not the best way to do it. Just my implementation.



来源:https://stackoverflow.com/questions/37745442/strlen-function-using-recursion-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!