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

C语言实现Pell数列至第n项:首项无法输出0的问题求助

解决Pell数列首项为0的问题

首先明确Pell数列的定义:P₀=0,P₁=1,Pₙ=2×Pₙ₋₁ + Pₙ₋₂(n≥2)。针对你输入n输出前n项、输入0无输出的需求,可通过调整初始值和循环逻辑实现:

修改思路

  1. 先判断输入n是否为0,直接跳过输出逻辑
  2. 当n≥1时,先输出首项0,再从第2项开始循环计算后续项
  3. 调整递推变量的初始值,匹配数列的递推规则

修改后的代码

#include <stdio.h>

int main(void){
    int n;
    int prev_prev = 0;  // 对应P₀
    int prev = 1;       // 对应P₁
    int current;
    int i;

    printf("Enter how many pell numbers to print: \n");
    scanf("%d", &n);

    if (n >= 1) {
        printf("%d", prev_prev);  // 输出首项0
        // 从第2项开始计算,循环n-1次(已输出1项)
        for (i = 2; i <= n; ++i) {
            current = 2 * prev + prev_prev;
            printf(" %d", current);
            prev_prev = prev;
            prev = current;
        }
        printf("\n");  // 结尾换行优化输出格式
    }

    return 0;
}

代码说明

  • 输入n=0时,if(n>=1)不成立,直接跳过输出,满足无输出要求
  • 输入n=1时,仅输出首项0
  • 输入n≥2时,先输出0,再循环计算并输出P₁到Pₙ₋₁,加上首项刚好n项
  • 递推公式严格遵循Pell数列定义,保证计算结果准确

如果想沿用你原代码的变量命名逻辑,也可以这样调整:

#include <stdio.h>

int main(void){
    int n;
    int n1 = 0;  // 改为P₀
    int n2 = 1;  // 改为P₁
    int i;
    int pell;

    printf("Enter how many pell numbers to print: \n");
    scanf("%d",&n);

    if(n >= 1) {
        printf("%d", n1);  // 先输出首项0
        for (i = 2; i <= n; ++i){
            pell = n2 + 2 * n1;  // 等价于Pₙ=2×Pₙ₋₁ + Pₙ₋₂
            printf(" %d", pell);
            n1 = n2;
            n2 = pell;
        }
        printf("\n");
    }

    return 0;
}

两种写法都能满足需求,核心是先处理首项0,再根据n的大小决定是否计算后续项,同时保证n=0时无输出。

内容的提问来源于stack exchange,提问作者Abdulrahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:05:30