我想按最短代码行的顺序打印数字5-0然后是0-5。这是我实现的。但是,寻找其他更少代码行的逻辑。请期待您的答复。 谢谢,
<html>
<body>
<script>
var n;
function count(n){
console.log(n);
if(n>=1){
return count(n-1);
}
else{
n=1;
count2(n);
}
}
function count2(n){
console.log(n);
if(n<5){
count2(n+1);
}
}
count(5);
</script>
</body>
</html>
答案 0 :(得分:3)
您的递归尝试可以这样写:
function count(n, limit=-n){
console.log(Math.abs(n));
if (n>limit) count(n-1, limit);
}
count(5);
在非递归版本中,它将是:
function count(n) {
for (let i = -n; i <= n; i++) console.log(Math.abs(i));
}
count(5);
答案 1 :(得分:2)
您无需为此使用递归。只需使用循环
let number = 5
//from 1 to your desired number
for(let i = 1;i<=number;i++){
console.log(i);
}
//from your desired number to 1
for(let i = number;i>0;i--){
console.log(i);
}
答案 2 :(得分:1)
您可以使用迭代。我能想到的最小的
console.log('forward');
[...'12345'].forEach(e=>console.log(e));
console.log('reverse');
[...'54321'].forEach(e=>console.log(e));
答案 3 :(得分:1)
更改步骤:
function ctn(num) {
let i = -1, n = num++;
do {
console.log(n);
n || (i = 1);
} while ( (n += i) < num);
}
答案 4 :(得分:0)
它可以取任意数字,可以任意增加(增量)
const print = (i=5, flow=1, inc=-1) => {
console.log(i);
if(i===0 && flow===1){
print(i+1,flow+1, 1);
return;
}
if(i===5 && flow===2){
return;
}
print(i+inc, flow, inc);
}
print();
答案 5 :(得分:0)
这里是使用 generators 的版本!
它从输出创建一个数组,并一次完成console.log。
function* count(n, max = n) {
yield n > 0 ? n : -n;
if (n > -max) yield* count(n-1, max);
}
console.log(Array.from(count(5)))