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 appelezprintstaircase code> pour la deuxième fois, cela pourrait commencer par être12 code>?Je me demande simplement s'il est possible de dériver la valeur du
i code> à partir den 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> commei code> devrait êtreinitaln - n code> ou quelque chose comme ça.