C语言1 1 2 3 5 8数列如何实现?

99ANYc3cd6
预计阅读时长 9 分钟
位置: 首页 C语言 正文

从第3个数开始,每个数都是它前面两个数的和。

  • 第1项: 1
  • 第2项: 1
  • 第3项: 1 + 1 = 2
  • 第4项: 1 + 2 = 3
  • 第5项: 2 + 3 = 5
  • 第6项: 3 + 5 = 8

下面我将用C语言提供几种不同的方法来生成这个数列。


使用循环(最常用)

这是最基础、最直接的方法,通过一个循环来计算并打印数列的每一项。

代码实现

#include <stdio.h>
int main() {
    int n; // 要打印的项数
    int t1 = 1, t2 = 1; // 前两项,初始化为1
    int nextTerm; // 存储下一项的值
    printf("请输入要打印的斐波那契数列项数: ");
    scanf("%d", &n);
    printf("斐波那契数列的前 %d 项为:\n", n);
    // 循环打印每一项
    for (int i = 1; i <= n; ++i) {
        // 打印当前项
        printf("%d ", t1);
        // 计算下一项
        nextTerm = t1 + t2;
        // 更新前两项的值,为下一次循环做准备
        t1 = t2;
        t2 = nextTerm;
    }
    printf("\n"); // 换行,使输出更整洁
    return 0;
}

代码解析

  1. 初始化: t1t2 分别代表数列的第一项和第二项,我们都将它们设为 1
  2. 循环: for 循环从 1 开始,一直运行到用户指定的项数 n
  3. 打印: 在每次循环开始时,打印当前的 t1 的值。
  4. 计算与更新:
    • nextTerm = t1 + t2; 计算出下一个数。
    • t1 = t2;t2 的值赋给 t1,这样在下次循环时,t1 就变成了原来的第二项。
    • t2 = nextTerm; 将计算出的 nextTerm 赋给 t2,这样在下次循环时,t2 就变成了我们刚刚计算出的新项。
  5. 结果: 循环结束后,数列就按顺序打印出来了。

运行示例

请输入要打印的斐波那契数列项数: 6
斐波那契数列的前 6 项为:
1 1 2 3 5 8 

使用递归(更优雅但效率较低)

递归是一种函数在自身内部调用自身的编程技巧,用递归来解决斐波那契问题非常符合其数学定义,但在计算较大项数时效率很低,因为会重复计算很多值。

代码实现

#include <stdio.h>
// 递归函数,用于计算第n项斐波那契数
int fibonacci(int n) {
    if (n <= 1) { // 基本情况:第1项和第2项都是1
        return 1;
    } else { // 递归情况:第n项 = 第n-1项 + 第n-2项
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
int main() {
    int n;
    printf("请输入要打印的斐波那契数列项数: ");
    scanf("%d", &n);
    printf("斐波那契数列的前 %d 项为:\n", n);
    // 循环调用递归函数来打印每一项
    for (int i = 1; i <= n; i++) {
        printf("%d ", fibonacci(i));
    }
    printf("\n");
    return 0;
}

代码解析

  1. fibonacci 函数:
    • 基本情况: n1 或更小(对于这个定义来说),直接返回 1,这是递归的终止条件,防止无限循环。
    • 递归情况: n 大于 1,函数就调用自身,分别计算 fibonacci(n-1)fibonacci(n-2),然后将它们的结果相加返回。
  2. main 函数: main 函数中的循环逻辑与方法一类似,只是它不再自己计算,而是调用 fibonacci(i) 来获取第 i 项的值并打印。

运行示例

请输入要打印的斐波那契数列项数: 6
斐波那契数列的前 6 项为:
1 1 2 3 5 8 

特性 循环 递归
效率 ,时间复杂度为 O(n)。 ,时间复杂度为 O(2^n),有大量重复计算。
内存占用 ,只使用了几个变量。 ,每次函数调用都会在调用栈上占用内存,可能导致栈溢出。
可读性 直接明了,逻辑清晰。 代码简洁,更贴近数学定义,易于理解。
适用场景 绝大多数情况,尤其是需要计算较大项数时。 适合教学、面试或代码量很小的场景,不推荐在生产环境中用于大数计算。

对于初学者和实际应用,强烈推荐使用第一种(循环)方法

-- 展开阅读全文 --
头像
织梦仿站好还是仿模板好
« 上一篇 01-12
c语言程序设计 现代方法答案哪里有?
下一篇 » 01-12
取消
微信二维码
支付宝二维码

目录[+]