im essayant de résoudre ce premier challange mais je coincé, j'aime programme rapide, donc je décidé d'utiliser la méthode récursive pas itérationUVa 3n + 1 cas récursif Stack Overflow
malheureusement, lorsque l'entrée est grand entier (100000> entrée> 1000000), son s'écraser souvent
donc je déboguer, et il indique l'erreur de débordement de pile
s'il vous plaît aidez-moi, je ne sais pas quoi faire, ive essayé de changer le type de données non signé long, int non signé, etc, mais rien ne fonctionne
ici est mon code, im utilisant ANSI C
#include "stdio.h"
int cek(int n) {
return n % 2;
}
int fung(int n,int c) {
if (n == 1) {
return c;
}
if (!cek(n)) {
return fung(n/2,++c);
}
else {
return fung((n*3)+1,++c);
}
}
int comp(int i,int j,int tmp) {
int temp;
if (i == j)
return tmp;
temp = fung(i,1);
if (temp > tmp)
return comp(++i,j,temp);
else
return comp(++i,j,tmp);
}
int main() {
int i,j,tmp;
while (scanf("%d %d",&i,&j)) {
if (i > j) {
tmp = i;
i = j;
j = tmp;
}
printf("%d %d %d\n",i,j,comp(i,j,0));
}
return 0;
}
PS: désolé pour mon stupidité, im vraiment un débutant @ _ @
« i like programme rapide, donc je décidé d'utiliser rec méthode ursive et non itération "- Qui vous a enseigné cela? En outre, vous devriez essayer de préférer le programme _readable_ aux programmes _fast_. – polygenelubricants
Voir 'temp' et' tmp' utilisés pour le même paramètre dans la même fonction me fait mal aux yeux. – Blindy
S'il vous plaît commenter votre code et décrire ce qu'il est censé faire, vous pouvez le faire en éditant votre question. Si vous avez des hypothèses cachées sur les valeurs, mettez des assertions pour vous assurer qu'elles sont vraies. Également indiquer plus précisément pour quelles entrées il fonctionne, pour lequel pas etc. –