所以我试图将这个功能用于冰雹,但我似乎无法将它打印在一条线上。下面是代码:
var hailStoneSeq = function(n){
var seq = n + " "
while(n != 1)
{
if(n % 2 == 0)
{
n = n / 2
console.log(n)
var newSeq = n
}
else
{
n = ((n * 3) + 1)
console.log(n)
newSeq = n
}
}
return seq + newSeq
}
现在,当我运行它时,console.log工作,它显示整个序列。但是return语句只返回输入的值,所以无论n最初是什么,和1.就像这样:
hailStoneSeq(5)
16
8
4
2
1
"5 1"
如何在结尾处获取return语句以将整个序列返回到一行?
答案 0 :(得分:1)
删除console.log(n)
行并在函数返回之前输出一个数组。此外,您不需要newSeq
变量,只需使用n
。
编辑:误解了问题,代码已修复
function hailStoneSeq(n){
var seq=[n]
while(n!=1){
if(n%2==0) n/=2
else n=(n*3)+1
seq.push(n)
}
return seq.join(' ')
}
console.log(hailStoneSeq(5))
答案 1 :(得分:0)
我略微更改了代码,删除了未使用的变量和代码重复:
var hailStoneSeq = function(n){
var arr = [];
arr.push(n);
while(n != 1)
{
n =n % 2 ? ((n * 3) + 1) : n / 2;
console.log(n)
arr.push(n);
}
return arr.join(" ")
};
console.log(hailStoneSeq(5));
关键是使用数组的连接方法。
答案 2 :(得分:0)
它应该是这样的:
function hailStoneSeq(n){
var seq = n;
while(n != 1){
if(n % 2 == 0){
n = (n / 2);
}else{
n = ((n * 3) + 1);
}
seq += (" " + n);
}
return seq;
}
console.log(hailStoneSeq(5));
基本上,你需要循环内的seq = seq + ...
(或seq += ...
)来存储每次迭代的进度。
在您的代码中,您存储了原始seq
并重复了newSeq = n
,然后将这些内容重新组合在一起。