J'essaie d'écrire le code de fonction récursive qui imprime chaque puissance de 2 de 1 à N, n est l'argument de la fonction d'alimentation.
int powers(int n) //here n=128 { if(n==2) { System.out.print(n); } else if (n>2) { System.out.print(n +", "); return powers(n/2); } System.out.println(""); return 0; }
3 Réponses :
As que le but de votre fonction imprime les pouvoirs de 2, vous n'avez pas besoin de renvoyer la valeur. Par conséquent, vous pouvez réécrire votre fonction comme suit:
String powers(int N) //here N=128 { if(N==2){ return (N + ""); } String prev = powers(N/2); return (prev + ", " + N); }
la fonction doit retourner entier
Pourquoi faisons-nous l'hypothèse que l'entrée n est déjà une puissance de 2? En outre, 2 ^ 0 = 1, devrait aussi être dans le résultat aussi? Ceci fonctionne même si vous donnez 131 comme entrée. P> P>
L'entrée pourrait également être négative, vous devez probablement faire votre premier si code> être
<= code>.
Je pense que ce serait un moyen plus élégant d'y parvenir. Les améliorations sont censées être:
p>
int powers(int N) //here N=128 { if (N < 2) return 0; powers(N >> 1); // Right shifting achieves division by 2 but a lot faster. if (N > 3) System.out.print(", "); // Fixing comma placement for all cases of N. System.out.print(N); return 0; }
Que se passe-t-il si vous appelez
powers (n / 2) code> (vous n'avez pas besoin de le renvoyer) avant i> imprimer
n code>, dans le < code> sinon si code> bloque?
J'essaie d'imprimer 2 ^ 1 = 2 - 2 ^ 7 = 128 C'est pourquoi essayer de faire des pouvoirs de retour (N / 2).
Mais la seule chose que votre méthode revient jamais est 0, ce n'est donc pas le code> code> qui compte, c'est l'ordre que vous imprimez des trucs. Vous imprimez le courant
n code> avant i> tout le reste, mais vous avez impliqué que vous voulez l'imprimer après i>.
Alors, comment nous pouvons inverser cette commande? Comme nous pouvons obtenir n / 2 = 64 et ainsi de suite.
En faisant ce que j'ai suggéré dans mon premier commentaire.