logique manquée dans la recherche de la sum à l’aide de la recurssion, segfault obtenu

J’ai essayé de réaliser après l’utilisation de la recurssion, mais je me fais corriger par segfault ??

J’ai essayé de résoudre le problème en utilisant la permutation de l’ensemble {1,, 3,5,7}, mais je n’ai pas réussi à obtenir le résultat requirejs
5 + 3
5 + 1 + 1 + 1
3 + 3 + 1 + 1
3 + 1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1

sumto8 (a, start, sum1) est: // choix de l’élément de préoccupation sumto8 (a, start, sum) est: // choix de l’élément de préoccupation

#include #include int sumto8(int*,int,int); int n=4; int c=8; int main() { int a[]={1,3,5,7}; sumto8(a,0,c); } int sumto8(int* a,int start,int sum) { if((sum(n-1))) return -1; if(sum==0) { cout<<" "<<a[start]; return printf("+ %d",a[start]); } if(i==-1) { return-1; } if(j==-1) { return -1 } else { int sum1=sum-a[start]; int i=sumto8(a,start,sum1); int j=sumto8(a,start+1,sum); } return printf("+ %d",a[start]); } 

il semble que la condition si pour la sum <0 ne vérifie pas correctement …

 output :segfault 

vous dites

il semble que la condition si pour la sum <0 ne vérifie pas correctement ...

j’ai découvert que votre vérification comme celle-ci

  if((sum<0) && (start>(n-1))) return -1; 

comment si “et” vous le changez en “ou”

  if((sum<0) || (start>(n-1))) return -1; 

J’ai trouvé un problème avec la boucle for nestede dans main. Il devrait se lire for(int j=0; j . Vous l'avez comme j qui ira en dehors des limites du tableau tel que vous l'avez déclaré

edit: il y a un autre problème avec cette section:

  /*dp[start][sum1]=*/sumto8(a,start,sum1);//choosing element of concern start++; /*dp[start][sum]*/=sumto8(a,start,sum); 

Dans le deuxième appel à sumto8 vous n'avez pas commenté le = . Vous avez beaucoup d'espace vide et de code commenté. De plus, vous n’appelez jamais la fonction isVisited() la même manière que tout est commenté et à la fin de la fonction sumto8 , vous avez deux instructions de retour identiques à la fin. Cela aiderait vraiment si vous et tout le monde ici si vous nettoyiez un peu.