当前位置: 首页 > news >正文

累和,累积,斐波拉契

累和、累积、斐波拉契

一、累和(Sum)

1. 定义

累和指将一系列数值依次相加的结果。例如,数列 1,2,3,4 的累和为 1+2+3+4=10

2. C 语言实现

#include <stdio.h>// 计算前n个自然数的累和(迭代法)
int sum_iterative(int n) {int sum = 0;for (int i = 1; i <= n; i++) {sum += i;}return sum;
}// 计算前n个自然数的累和(数学公式)
int sum_formula(int n) {return n * (n + 1) / 2;
}int main() {int n = 10;printf("迭代法累和: %d\n", sum_iterative(n));printf("公式法累和: %d\n", sum_formula(n));return 0;
}

3. 性能分析

  • 迭代法:时间复杂度 (O(n)),需遍历 n 次。
  • 公式法:时间复杂度 (O(1)),直接计算。

二、累积(Product)

1. 定义

累积指将一系列数值依次相乘的结果。例如,数列 1,2,3,4 的累积为 1×2×3×4=24(即 4 的阶乘)。

2. C 语言实现

#include <stdio.h>// 计算前n个自然数的累积(迭代法)
int product_iterative(int n) {int product = 1;for (int i = 1; i <= n; i++) {product *= i;}return product;
}// 计算前n个自然数的累积(递归法)
int product_recursive(int n) {if (n == 0) return 1;return n * product_recursive(n - 1);
}int main() {int n = 5;printf("迭代法累积: %d\n", product_iterative(n));printf("递归法累积: %d\n", product_recursive(n));return 0;
}

3. 性能分析

  • 迭代法:时间复杂度 (O(n)),需遍历 n 次。
  • 递归法:时间复杂度 (O(n)),但递归深度为 n,可能导致栈溢出(如 n>10000)。

三、斐波那契数列(Fibonacci)

1. 定义

斐波那契数列满足:(F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2))(n≥2)。 例如:0, 1, 1, 2, 3, 5, 8, 13, ...

2. C 语言实现

#include <stdio.h>// 方法1:递归法
int fib_recursive(int n) {if (n <= 1) return n;return fib_recursive(n - 1) + fib_recursive(n - 2);
}// 方法2:迭代法(循环)
int fib_iterative(int n) {if (n <= 1) return n;int a = 0, b = 1, c;for (int i = 2; i <= n; i++) {c = a + b;a = b;b = c;}return b;
}// 方法3:矩阵快速幂(高效算法)
void multiply(int F[2][2], int M[2][2]) {int x = F[0][0] * M[0][0] + F[0][1] * M[1][0];int y = F[0][0] * M[0][1] + F[0][1] * M[1][1];int z = F[1][0] * M[0][0] + F[1][1] * M[1][0];int w = F[1][0] * M[0][1] + F[1][1] * M[1][1];F[0][0] = x;F[0][1] = y;F[1][0] = z;F[1][1] = w;
}void power(int F[2][2], int n) {if (n == 0 || n == 1) return;int M[2][2] = {{1, 1}, {1, 0}};power(F, n / 2);multiply(F, F);if (n % 2 != 0) multiply(F, M);
}int fib_matrix(int n) {if (n == 0) return 0;int F[2][2] = {{1, 1}, {1, 0}};power(F, n - 1);return F[0][0];
}int main() {int n = 10;printf("递归法斐波那契: %d\n", fib_recursive(n));printf("迭代法斐波那契: %d\n", fib_iterative(n));printf("矩阵法斐波那契: %d\n", fib_matrix(n));return 0;
}

3. 性能对比

方法时间复杂度空间复杂度适用场景
递归法(O(2^n))(O(n))n 较小(n<30)
迭代法(O(n))(O(1))n 中等(n<10^6)
矩阵快速幂(O(\log n))(O(1))n 极大(n>10^9)

四、常见问题与优化

  1. 整数溢出:累积和斐波那契数列增长极快,需使用 long long__int128 类型。
  2. 递归深度:递归法可能导致栈溢出,建议使用迭代法。
  3. 大数计算:若需处理极大数值(如 n=1000),需使用高精度库(如 GMP)。

五、应用场景

  • 累和:计算平均数、等差数列求和。
  • 累积:计算排列组合数、概率问题。
  • 斐波那契数列:生物生长模型、黄金分割、动态规划。
http://www.dtcms.com/a/285194.html

相关文章:

  • 如何统一分销价格体系实战指南?
  • 验证损失判断过拟合情况
  • echart设置trigger: ‘axis‘不显示hover效果
  • c#笔记之方法的形参列表以及方法重载
  • 智能外呼系统应用场景
  • Windows 11清理C盘方法大全:磁盘清理/禁用休眠/系统还原点/优化大师使用教程
  • PostgreSQL 中的 pg_trgm 扩展详解
  • docker 安装nacos
  • Content-Type 请求头
  • 求解偏微分方程的傅里叶积分解
  • 【C语言进阶】内存函数
  • app打包ios上架appStore流程
  • 强化第三讲—一元函数微分学的概念
  • vue + Cesium 实现 3D 地图水面效果详解
  • Leetcode刷题营第二十七题:二叉树的最大深度
  • 研二Last Day
  • 【保姆级喂饭教程】idea开发TODO规范
  • 【项目实践08】【事务加锁的问题】
  • 【C++类和对象解密】面向对象编程的核心概念(下)
  • openinstall上线SSL证书服务,开启数字安全新纪元
  • 从现场出发:能源系统中的智能设备与实际落地工具解读
  • 7 基本的空间关系判断
  • Git仓库核心概念与工作流程详解:从入门到精通
  • 「Java案例」递归实现整数的倒置
  • MyBatis-Flex 学习与整理
  • LeNet-5 详解:从理论到实践
  • HTML前端性能优化完整指南
  • LeetCode 234:回文链表
  • 文件类型说明
  • H7-TOOL脱机下载后,自动重连RTT,CAN和串口助手三合一模式方法,方便项目测试(2025-07-16)