int my_strlen_rec(char const *str) {
if (str[0] == 0) {
return 0;
}
return (1 + my_strlen_rec(str + 1));
}ce programme sert à calculer la longueur d'une string, en itératif c'est ultra simple vu qu'il suffit de faire un compteur en l'initiant à 0 puis l'incrémenter à chaque fois qu'il avance dans la string, mais en récursif, il y a beau y avoir 3 lignes, je comprends que dalle à la dernière, quelqu'un pourrait-il avoir l'âme charitable de me l'expliquer ? 
merci d'avance 
ce que je comprends pas c'est pourquoi 1 + strlen(str+1) au lieu de simpmement faire strlen(str+1) ?
c'est quoi qui change en fait ?
Strlen mais de façon recursive.
La première partie est la condition d'arrêt;
Et en dessous bah ça continue quoi enfin rien de très compliqué
Je suppose qu'un pointeur vers une string finit par 0 (par là j'entends l'octet de valeur 0).
L'appel récursif avance le pointeur de 1 octet (donc l'octet de position 0 de l'appel récursif est l'octet 1 de l'exécution précédente), de ce fait au bout d'un moment on atteint l'octet final de valeur 0 et on sait qu'on a parcouru toute la chaîne.
À ce moment là on remonte la pile (donc on additionne tout les 1 des appels récursifs) et on obtient la longueur de la chaîne.
En tout cas c'est mes suppositions avec mes connaissances un peu vieilles du C. 
ça ajoute 1 à ta variable et aussi à son identifiant ce qui fait que le numéro devient null quand la chaine a fini
on dirait du python si je ne m'abuse
Le 27 octobre 2022 à 20:50:26 :
Strlen mais de façon recursive.La première partie est la condition d'arrêt;
Et en dessous bah ça continue quoi enfin rien de très compliqué
je suis au courant mec, mais le truc qui me nique le cerveau c'est pourquoi 1 + strlen(str+1) au lieu de simplement faire avancer avec simplement strlen(str + 1)
il apporte quoi de plus ce 1+ ??
Le 27 octobre 2022 à 20:45:04 :
<code>int my_strlen_rec(char const *str) {if (str[0] == 0) {
return 0;
}return (1 + my_strlen_rec(str + 1));
}</code>ce programme sert à calculer la longueur d'une string, en itératif c'est ultra simple vu qu'il suffit de faire un compteur en l'initiant à 0 puis l'incrémenter à chaque fois qu'il avance dans la string, mais en récursif, il y a beau y avoir 3 lignes, je comprends que dalle à la dernière, quelqu'un pourrait-il avoir l'âme charitable de me l'expliquer ?
merci d'avance
C'est du rust ?

Le 27 octobre 2022 à 20:47:11 :
ce que je comprends pas c'est pourquoi 1 + strlen(str+1) au lieu de simpmement faire strlen(str+1) ?c'est quoi qui change en fait ?
J'ai pas fait de C depuis des siècles je dis peut-être n'importe quoi mais je vais essayer :
Prenons " (1 + my_strlen_rec(str + 1)); "
le 1+ extérieur comptabilise le caractère actuel, tandis que le +1 à l'intérieur de l'appel récursif fait en sorte de pousser l'offset du string pour qu'il commencer à compter à partir du caractère suivant
Exemple : ton *str c'est -> "bonjour", le *str +1 sera ->"onjour", donc la taille sera 1 + (taille de onjour)
et le 0 sert à détecter le marqueur de fin de chaîne
Le 27 octobre 2022 à 20:50:59 :
T'es en quelle année ? Quelle école ??
epitech première année, j'ai honte d'avoir mal compris un truc aussi con
Le 27 octobre 2022 à 20:51:05 :
Je suppose qu'un pointeur vers une string finit par 0 (par là j'entends l'octet de valeur 0).
L'appel récursif avance le pointeur de 1 octet (donc l'octet de position 0 de l'appel récursif est l'octet 1 de l'exécution précédente), de ce fait au bout d'un moment on atteint l'octet final de valeur 0 et on sait qu'on a parcouru toute la chaîne.
À ce moment là on remonte la pile (donc on additionne tout les 1 des appels récursifs) et on obtient la longueur de la chaîne.En tout cas c'est mes suppositions avec mes connaissances un peu vieilles du C.
Le 27 octobre 2022 à 20:51:19 :
ça ajoute 1 à ta variable et aussi à son identifiant ce qui fait que le numéro devient null quand la chaine a finion dirait du python si je ne m'abuse
putain je vous adore merci les clés
et non clochardasso8, c'est du C _.gif)
Le 27 octobre 2022 à 20:51:37 :
Le 27 octobre 2022 à 20:50:26 :
Strlen mais de façon recursive.La première partie est la condition d'arrêt;
Et en dessous bah ça continue quoi enfin rien de très compliqué
je suis au courant mec, mais le truc qui me nique le cerveau c'est pourquoi 1 + strlen(str+1) au lieu de simplement faire avancer avec simplement strlen(str + 1)
il apporte quoi de plus ce 1+ ??
parce que ça boucle pas seulement sur le nombre de caractères mais aussi sur le tableau d'index
Le 27 octobre 2022 à 20:52:32 :
C'est quoi ce langage du démon qui permet d'ajouter un nombre entier à un pointeur sur chaîne : str+1 ?
Le C permet de faire ça
Le 27 octobre 2022 à 20:51:37 :
Le 27 octobre 2022 à 20:50:26 :
Strlen mais de façon recursive.La première partie est la condition d'arrêt;
Et en dessous bah ça continue quoi enfin rien de très compliqué
je suis au courant mec, mais le truc qui me nique le cerveau c'est pourquoi 1 + strlen(str+1) au lieu de simplement faire avancer avec simplement strlen(str + 1)
il apporte quoi de plus ce 1+ ??
Car à chaque fois la méthode retourne un nombre. Arrivé à la fin de ta string ça va retourner 0, donc ça fera 1 + 0, puis ça retournera 1 donc ça fera 1+1, puis ca retournera 2 donc ça fera 1+2, etc selon le nombre de profondeur de la récursivité.
Le 27 octobre 2022 à 20:47:11 :
ce que je comprends pas c'est pourquoi 1 + strlen(str+1) au lieu de simpmement faire strlen(str+1) ?c'est quoi qui change en fait ?
ben ça compte quoi ... c'est du récursif. Donc y a un + 1 à chaque appel
JvArchive compagnon