J'ai un tableau et je veux remplir ce tableau en utilisant la récursivité. Il s'agit de la séquence de Collatz. Il n'est pas nécessaire de connaître le problème pour comprendre le code. Le code que je l'ai écrit est leRécursivité ne fonctionne pas comme voulu
suivantint recursion(long int n, int *array){
if(*(array + n)==0){//check if I already have the length of the sequence for this n
if((n+1)/2==(double)(n+1)/(double)2){//check if n mod 2 == 0
*(array+n) =recursion((n+1)/2-1,array)+1;
}
else{
*(array +n)=recursion(3*n+3,array)+1;
}
}
else{
return *(array+n);
}
}
L'idée est que si j'ai un tableau avec des zéros sauf ce tableau [0] = 1 et si j'écris recursion(100,array)
alors la fonction vérifie si à la position 100 du tableau est zéro. Si c'est zéro, alors la fonction vérifie une autre condition et assigne un nombre au tableau [100]. Ce tableau [100] est défini de manière récursive. Si finalement il voit un élément de tableau qui n'est pas zéro, il retourne cet élément de tableau.
Je m'attends à ce que dans ce processus de récursivité pour n = 100, non seulement trouver une valeur pour array [100], mais aussi pour d'autres éléments de tableau. Mais si j'exécute cette fonction dans ma fonction principale, cela donne pour plusieurs éléments de tableau un 1 et pour array [100] c'est aussi 1, mais devrait être beaucoup plus grand que 1, puisque j'ajoute 1 dans chaque récursion. Je ne vois vraiment pas ce que je néglige ici.
Si vous voulez "vérifier si n mod 2 == 0", pourquoi ne pas simplement 'if (n% 2 == 0)'? – melpomene
Votre implémentation Collatz semble incorrecte: ne devrait-elle pas être 'récursion (n/2, array) + 1' et' récursion (3 * n + 1, array) + 1' pour les cas pairs et impairs, respectivement? – melpomene
Afficher le reste du code, en particulier la déclaration et l'initialisation de 'array' et les appels à' récursion'. – melpomene