C语言实现Pell数列至第n项:首项无法输出0的问题求助
解决Pell数列首项为0的问题
首先明确Pell数列的定义:P₀=0,P₁=1,Pₙ=2×Pₙ₋₁ + Pₙ₋₂(n≥2)。针对你输入n输出前n项、输入0无输出的需求,可通过调整初始值和循环逻辑实现:
修改思路
- 先判断输入n是否为0,直接跳过输出逻辑
- 当n≥1时,先输出首项0,再从第2项开始循环计算后续项
- 调整递推变量的初始值,匹配数列的递推规则
修改后的代码
#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
相关产品推荐
相关产品推荐

