J'ai écrit l'algorithme d'escalier d'impression. Une fonction qui compte n em> imprime les niveaux d'escalier n em>. p> var i = 1;
function printStaircase(n) {
//Base case
if (n < 1) return n;
//Recursive case
var line = '';
line += ' '.repeat(n - 1);
line += '*'.repeat(i);
console.log(line);
i++;
return printStaircase(n - 1);
}
printStaircase(10);
4 Réponses :
Fermeture à la rescousse:
p>
/** * @return stair case n high */ function staircase(n) { function helper (cur, str) { if (cur < 1) return str; return helper( cur - 1, `${str}${' '.repeat(cur)}${'*'.repeat(n-cur+1)}\n`); } return helper(n, ''); } /** * prints a staircase n-1 hight * @return 0 (don't know why) */ function printStaircase(n) { console.log(staircase(n)); return 0; } printStaircase(10); printStaircase(3);
L'extrait ne semble pas émettre le résultat correct
@Johnsnow corrigé maintenant.
Je pense que quelque chose comme ça fonctionnerait espère que cela aide! p> p>
Oui, merci. C'est ce que je suis également venu avec aussi
@Johnsnow Vous pouvez utiliser un argument par défaut Fonction printStaircase (n, i = 1) {...} code> donc lorsque vous appelez
printstaircase (10) code> valeur par défaut de
1 code> sera attribué à
i code>
p> n code> et
i code> sont liés dans ce
i code> est simplement la valeur intérieure de
n code> moins la valeur actuelle de
n code>
+1 code>, nous pouvons donc capturer cela assez bien avec quelque chose comme:
function printStaircase(n) {
staircaseInternal(n);
function staircaseInternal(curr) {
//Base case
if (curr < 1) return;
//Recursive case
var line = ' '.repeat(curr - 1);
line += '*'.repeat((n - curr) + 1);
console.log(line);
staircaseInternal(curr - 1);
}
}
printStaircase(10);
Nice, donc la réponse, je suppose que le seul moyen de le faire est via une fermeture ou un deuxième paramètre à la fonction. J'essaie juste de voir comment préserver la valeur initiale de N, merci cela aide.
la récursion est super amusant -
p>
const chars = (c = "") => (n = 0) => n === 0 ? "" : c + chars (c) (n - 1) const spaces = chars (" ") const stars = chars ("*") const newline = "\n" const stairs = (n, m = n - 1) => m <= 0 ? "" : spaces (m) + stars (n - m) + newline + stairs (n, m - 1) console .log (stairs (10)) console .log (stairs (4))
Est-il nécessaire d'accomplir la sortie à l'aide d'une fonction récursive uniquement?
Oui, je ne veux pas y parvenir itératif.
Qu'en est-il de
i code>? Si vous appelez
printstaircase code> pour la deuxième fois, cela pourrait commencer par être
12 code>?
Je me demande simplement s'il est possible de dériver la valeur du
i code> à partir de
n code>. Est-il possible?
Vous pouvez commencer à appeler la méthode comme celle-ci - PrintStaircase (10,1); et transmettre la valeur de i en incrémentant dans l'appel suivant.
Oui, vous devez garder une trace de la valeur initiale de
n code> comme
i code> devrait être
initaln - n code> ou quelque chose comme ça.