strlen function using recursion in c

后端 未结 4 1332
离开以前
离开以前 2021-01-26 11:17

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         


        
相关标签:
4条回答
  • 2021-01-26 11:59
    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

    0 讨论(0)
  • 2021-01-26 12:00

    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.

    0 讨论(0)
  • 2021-01-26 12:15
    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.

    0 讨论(0)
  • 2021-01-26 12:16

    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.

    0 讨论(0)
提交回复
热议问题