如何使用递归.....打印1到5和5到1?

时间:2019-01-27 15:31:52

标签: javascript jquery

我想按最短代码行的顺序打印数字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>

6 个答案:

答案 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)))