我对编程很新,我开始了解JavaScript,而且我刚刚学会了递归的概念。现在给我一个问题,创建一个函数(如const f = function(n) { }
),如果我们用f(5)
调用函数,我们应该看到:
*
***
*****
*******
*********
垂直星的数量必须由输入确定。 我必须在/ while / do-while中使用no;递归只能循环。
我已经提出了这个代码来连接5颗星
const f = function(n) {
if (n === 0) {
return "";
}
return "*" + f(n - 1);
};
console.log(f(5));
虽然,我不知道如何制作三角形,我该怎么办?
答案 0 :(得分:4)
您可以使用此代码:
const f = function(chr, n) {
if (n === 0) {
return "";
}
return chr + f(chr, n - 1);
};
const g = function(max) {
const inner = function(n) {
if (n > 1) {
inner(n-1);
}
console.log(f(' ', max-n) + f('*', (n*2)-1));
};
inner(max);
};
g(5);
答案 1 :(得分:1)
请查看并播放以下示例
function pyramid(n, row = 0, level = '') {
if (row === n) {
return
}
if (level.length === n * 2 - 1) {
console.log(level)
return pyramid(n, row + 1)
}
const midpoint = Math.floor((2 * n - 1) / 2)
let add;
if (midpoint - row <= level.length && midpoint + row >= level.length) {
add = '#'
} else {
add = ' '
}
pyramid(n, row, level + add)
}
pyramid(3)
答案 2 :(得分:0)
您使用
走在正确的道路上 if (n === 0) ...
和
f(n-1)
这些都是正确的。
现在你只需要在每个函数调用中输出正确数量的星号。请查看string.repeat()。
如果您想查看完整的解决方案,而不只是提示:here是我的解决方案。
答案 3 :(得分:0)
我想出了这个,这就是我需要的东西
const astx = function(n){
if(n===0){
return "";
}
return '*' + astx(n-1);
};
const space = function(n){
if(n===0){
return "";
}
return ' '+space(n-1);
};
const line = function(n, all){
if(n === all+1)
return;
console.log(space(all-n) + astx(2*n - 1));
line(n+1,all);
};
const triangle = function(n){
line(1,n);
};
triangle(5);
答案 4 :(得分:0)
function recursiveStar(n){
if(n === 0) return 0;
recursiveStar(n - 1);
return console.log('*'.repeat(n));
}
recursiveStar(5)
答案 5 :(得分:0)
您可以尝试
function pyramid(n, row = 0) {
if (n === row) return;
let midpoint = Math.ceil((n + n - 1) / 2);
let str = "";
for (let j = 1; j <= n + n - 1; j++) {
if (j <= midpoint + row && j >= midpoint - row) str += "#";
else str += " ";
}
console.log(str);
pyramid(n, row + 1);
}
pyramid(5);
答案 6 :(得分:0)
由于这个老问题最近又被提出来了,下面是一个替代版本,该深度将深度视为常量并重复出现在行号上:
const pyramid = (n, r = 0) =>
r > n - 1
? ''
: ' '.repeat ((n - 1 - r)) + '*'.repeat ((2 * r + 1)) + '\n' + pyramid (n, r + 1)
console .log (pyramid (5))
我们使n
保持固定,将r
从零开始,然后递归递增r
直到大于n
。在我们的基本情况下,当n
为0
且r
为0
时,我们得到r > n - 1
,并返回一个空字符串。递归的情况是通过在第一行中添加正确的空格数,正确的开始数,然后通过递增r
并重复计算剩余的行来进行的。
const pyramid = (n, r = 0) =>
r > n - 1
? ''
: ' ' .repeat ((n - 1 - r)) + '*' .repeat ( (2 * r + 1)) + '\n' + pyramid (n, r + 1)
// `-----------------------' `------------------------' `--' `----------------'
// | | | |
// | | | +-- next rows
// | | +---------------- line break
// | +----------------------------------- asterisks
// +--------------------------------------------------------------- empty spaces
唯一的棘手问题是计算正确的恒星和空间数量。很容易看出,对于pyramid (5)
,空格应该从4
稳定地减小到0
,而星号应该从1
增大到9
。这些分别由公式n - 1 - r
和2 * r + 1
捕获。
这最初是用于分配的,并且如果该分配不允许我们使用String.prototype.repeat
,那么我们可以在这样的函数中轻松编写自己的递归版本:
const repeat = (c, n) =>
n < 1 ? '' : c + repeat (c, n - 1)
const pyramid = (n, r = 0) =>
r > n - 1
? ''
: repeat (' ', (n - 1 - r)) + repeat ('*', (2 * r + 1)) + '\n' + pyramid (n, r + 1)