C++ 各种无符号整型能够在溢出之前计算出斐波那契数列的最大项数是几?答案是24、47、93

简介: C++ 各种无符号整型能够在溢出之前计算出斐波那契数列的最大项数是几?答案是24、47、93

斐波那契数列 (Fibonacci)


   又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:


   1、1、2、3、5、8、13、21、34……


   在数学上,斐波那契数列以如下被以递推的方法定义:

F(1) = 1,F(2) = 1
    F(n) = F(n - 1) + F(n - 2) (n ≥ 3,n ∈ N*)

   简单来讲就是:数列中第3项开始,任一项的值都等于它前两项之和。


用数列定义,可以计算出各种 unsigned 无符号整数类型在溢出之前最多能输出到数列的第几项? 答案是24、47、93:

#include <iostream>
#include <limits>
using namespace std;
#define outFibonacci(nType) { int i = 1;\
    while (i++)\
      if (Fibonacci<nType>(i+1)==Fibonacci<nType>(i+2)){\
        cout<<"F("<<i<<")\t= "<<Fibonacci<nType>(i)<<endl;\
        break;\
      }\
  cout<< "Max Num\t= " << numeric_limits<nType>::max() << endl << endl;\
  }
template<typename _T> _T Fibonacci(_T n){
    _T f, f1, f2;
    f = f1 = f2 = 1;
  for (auto i=3; i<=n; ++i){
        f = f1 + f2;
        if (f<f2){ //设置溢出条件 
      f=-1;
      break;
    }
        f1 = f2;
        f2 = f;
    }
    return f;
}
int main(void)
{ 
  outFibonacci(unsigned short);
  outFibonacci(unsigned int);
  outFibonacci(unsigned long);  //与上一类型输出相同 
  outFibonacci(unsigned long long);
  outFibonacci(size_t); //在我的系统上与上一类型输出相同
  return 0;
}


输出结果:

F(24)   = 46368
Max Num = 65535
F(47)   = 2971215073
Max Num = 4294967295
F(47)   = 2971215073
Max Num = 4294967295
F(93)   = 12200160415121876738
Max Num = 18446744073709551615
F(93)   = 12200160415121876738
Max Num = 18446744073709551615
--------------------------------


   Process exited after 0.6217 seconds with return value 0

   请按任意键继续. . .  


注:上述代码中有一个函数 numeric_limits<TypeName>::max()  计算数据类型的最大值,需要头文件#include <limits>;numeric_limits<TypeName>::min() 则是计算数据类型的最小值。



目录
相关文章
|
人工智能 Oracle 关系型数据库
全球CRM系统市场份额分析:领导者与挑战者
随着全球企业对CRM系统的依赖性增加,CRM市场正经历快速增长和激烈竞争。本文分析了全球CRM市场的份额,介绍了市场领导者如Salesforce、Oracle、SAP、纷享销客等,以及挑战者如HubSpot CRM、Zoho CRM等,并预测了未来市场趋势,包括云计算的普及、人工智能的融合和本土化需求的增加。
|
9月前
|
机器学习/深度学习 人工智能 缓存
SepLLM:开源大模型加速神器!400万Token长文本推理提速50%,告别OOM噩梦
SepLLM 是一个用于加速大语言模型的高效框架,通过压缩段落信息并消除冗余标记,显著提高了模型的推理速度和计算效率,适用于长文本处理和多场景部署。
405 7
SepLLM:开源大模型加速神器!400万Token长文本推理提速50%,告别OOM噩梦
|
9月前
|
测试技术 持续交付 开发者
Logic Error: 如何识别和修复逻辑错误
识别和修复逻辑错误是软件开发中的重要技能。通过理解程序需求、使用调试工具、打印日志和编写单元测试,可以有效地识别逻辑错误。修复逻辑错误时,需仔细阅读代码,回溯错误来源,并进行全面的重新测试。遵循最佳实践,如保持代码简洁、进行代码审查和使用持续集成,可以进一步减少逻辑错误的发生,提高代码质量。希望本文能帮助开发者更好地识别和修复逻辑错误,编写出高质量的软件。
684 16
|
9月前
|
存储 安全 测试技术
云计算应该掌握的八种用途
云计算通过互联网提供按需付费的云服务,广泛应用于软件开发、社交网络、大数据分析、数据备份、文件存储、灾难恢复、云端通信和业务流程管理等领域。它帮助企业降低硬件成本、提高开发效率、保障数据安全、增强业务连续性,并支持多样化应用场景,成为数字化转型的核心引擎。
1841 2
|
10月前
|
存储 数据挖掘 数据处理
pandas 读取xlsx文件复制文件
Pandas 提供了强大的功能来读取和处理 Excel 文件,通过结合使用 `read_excel` 和 `to_excel` 方法,可以轻松地对 Excel 文件进行读取、处理和复制。无论是处理单个工作表还是多个工作表,Pandas 都能高效地完成任务。
280 11
|
监控 安全
IT治理:确保IT与业务目标一致的关键路径
【6月更文挑战第22天】IT治理确保了IT与业务目标的一致性,关键策略包括战略对齐、清晰的IT规划、关注业务需求、设定绩效指标、风险管理及持续改进。通过这些措施,企业能有效利用IT资源支持业务发展,实现数字化时代的成功转型和长期增长。
|
12月前
|
人工智能 移动开发 前端开发
温暖接力:“追星星的AI”再出发,志愿者招募令!
孤独症儿童绘本创作工具二期迭代开发,缺人!
349 21
温暖接力:“追星星的AI”再出发,志愿者招募令!
|
10月前
|
监控 图形学
Unity 倒计时的实现
在 Unity 中实现倒计时功能,主要利用 `Time.deltaTime` 进行精确的时间计算和监控。本文介绍两种常见实现方法:一是通过 `WaitForSeconds(1)` 每秒递减时间,二是基于 `Update()` 函数每帧减去 `Time.deltaTime`。代码中包含详细的注释和示例,需确保挂载 Text 组件以显示倒计时。
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
2087 0
|
12月前
|
人工智能 程序员 开发者
如何使用Ascend的ATB加速库?
ATB加速库专为Transformer模型优化设计,基于华为Ascend AI处理器,提升训练和推理效率。本文档详细介绍了如何实现一个ATB算子,涵盖基础Operation、插件机制和Graph Frame三种方式,从环境准备、算子创建、资源管理到最终执行,提供了完整的代码示例和步骤指南,帮助开发者快速掌握ATB算子的开发流程。