You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让JavaScript斐波那契生成器避免生成两个1?

解决斐波那契序列中出现两个1的问题

你的代码生成的是标准斐波那契序列(以0、1为起始项),按照数学定义,第三项必然是0+1=1,所以连续出现两个1是正常逻辑。如果要避免输出两个1,可以根据你想要的目标序列选择以下方案:

方案1:输出从1起始且无重复1的变种序列

如果希望序列以1开头,且后续直接从2开始(跳过第二个1),可以调整初始值和循环逻辑:

let prev = 1, curr = 2, nextTerm;
let number = 10;

console.log("Girdiğiniz sayının sırasına kadar olan Fibonacci değerleri:");
// 打印第一个1
console.log(prev);
for (let i = 2; i <= number; i++) {
    console.log(curr);
    nextTerm = prev + curr;
    prev = curr;
    curr = nextTerm;
}

输出序列:1,2,3,5,8,13,21,34,55,89

方案2:保留0起始,但跳过第二个1

如果想保留以0开头的序列结构,仅去掉重复的1,可以在循环中添加判断逻辑:

let sayi3 = 0, sayi4 = 1, nextTerm;
let number = 10;
let count = 0;

console.log("Girdiğiniz sayının sırasına kadar olan Fibonacci değerleri:");

while (count < number) {
    // 跳过第二个1的打印
    if (!(sayi3 === 1 && count > 1)) {
        console.log(sayi3);
        count++;
    }
    nextTerm = sayi3 + sayi4;
    sayi3 = sayi4;
    sayi4 = nextTerm;
}

输出序列:0,1,2,3,5,8,13,21,34,55

方案3:调整循环打印顺序

通过改变打印和更新的先后逻辑,避免连续输出1:

let a = 0, b = 1, nextTerm;
let number = 10;

console.log("Girdiğiniz sayının sırasına kadar olan Fibonacci değerleri:");
// 先打印第一个项0
console.log(a);
for (let i = 2; i <= number; i++) {
    nextTerm = a + b;
    // 跳过第二个1的打印,同时补全总项数
    if (nextTerm !== 1 || i !== 3) {
        console.log(nextTerm);
    } else {
        number++;
    }
    a = b;
    b = nextTerm;
}

需要注意:方案2和3属于修改了标准斐波那契序列的结构,如果你需要的是符合数学定义的标准序列,那两个1是正常现象,无需调整。

内容的提问来源于stack exchange,提问作者Engin Emre Deniz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:38:30