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() 则是计算数据类型的最小值。



目录
相关文章
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
244 13
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
141 0
|
9月前
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
149 4
|
机器学习/深度学习 算法 C++
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
|
C++
C++ PCL 计算多个RT矩阵变换后的变换矩阵
C++ PCL 计算多个RT矩阵变换后的变换矩阵
169 0
|
C++
C++代码来计算一个点围绕另一个点旋转45度后的坐标
C++代码来计算一个点围绕另一个点旋转45度后的坐标
272 0
|
C++ 开发者
C++一分钟之-编译时计算:constexpr与模板元编程
【7月更文挑战第2天】C++的`constexpr`和模板元编程(TMP)实现了编译时计算,增强代码效率。`constexpr`用于声明编译时常量表达式,适用于数组大小等。模板元编程则利用模板进行复杂计算。常见问题包括编译时间过长、可读性差。避免方法包括限制TMP使用,保持代码清晰。结合两者可以解决复杂问题,但需明确各自适用场景。正确使用能提升代码性能,但需平衡复杂性和编译成本。
257 3
|
8月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
4月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
112 0
|
4月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
186 0