首页 > 编程语言 >以下是一个简单的C++程序,用于生成斐波那契数列的前n项

以下是一个简单的C++程序,用于生成斐波那契数列的前n项

时间:2024-03-29 16:02:50浏览次数:27  
标签:std generateFibonacci 数列 C++ 斐波 fibonacci 那契

斐波那契数列是一个在自然界中广泛出现的数列,其定义是:第一个和第二个数都是1,从第三个数开始,每一个数都是前两个数之和。斐波那契数列的前几项是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …

以下是一个简单的C++程序,用于生成斐波那契数列的前n项:

#include <iostream>
#include <vector>

// 函数声明
std::vector<int> generateFibonacci(int n);

int main() {
    int n;
    std::cout << "请输入你想生成的斐波那契数列的项数: ";
    std::cin >> n;

    // 调用函数生成斐波那契数列
    std::vector<int> fibonacci = generateFibonacci(n);

    // 打印斐波那契数列
    std::cout << "斐波那契数列的前 " << n << " 项是: ";
    for (int i = 0; i < n; ++i) {
        std::cout << fibonacci[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

// 函数定义
std::vector<int> generateFibonacci(int n) {
    std::vector<int> fibonacci(n);
    
    if (n == 0) {
        return fibonacci;
    }
    
    fibonacci[0] = 1; // 第一个数
    if (n == 1) {
        return fibonacci;
    }
    
    fibonacci[1] = 1; // 第二个数
    
    for (int i = 2; i < n; ++i) {
        fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2]; // 当前项等于前两项之和
    }
    
    return fibonacci;
}

这个程序首先提示用户输入想要生成的斐波那契数列的项数,然后调用generateFibonacci函数生成相应的斐波那契数列,并打印出来。

generateFibonacci函数接受一个整数n作为参数,表示要生成的斐波那契数列的项数,并返回一个包含这些项的整数向量。这个函数首先创建一个大小为n的向量fibonacci,然后按照斐波那契数列的定义填充这个向量。如果n为0,函数返回一个空的向量;如果n为1,函数返回一个只包含第一个斐波那契数的向量。对于n大于1的情况,函数首先设置前两个数为1,然后通过一个循环计算并填充剩余的项。

这个程序的时间复杂度是O(n),因为它需要计算n个斐波那契数。空间复杂度也是O(n),因为它需要存储n个斐波那契数。在实际应用中,如果n非常大,可能需要考虑使用更高效的算法,比如矩阵快速幂等,来减少计算时间。

此外,这个程序只生成了斐波那契数列的正整数部分。实际上,斐波那契数列也可以扩展到负数索引,其中F(-n) = (-1)^(n+1) * F(n),即负索引的斐波那契数是对应正索引斐波那契数的符号交替版本。如果需要处理这种情况,程序需要进行相应的修改。

标签:std,generateFibonacci,数列,C++,斐波,fibonacci,那契
From: https://blog.csdn.net/Dalao_zzl/article/details/137145141

相关文章

  • C++从入门到精通——函数重载
    函数重载前言一、函数重载概念二、函数重载的分类参数类型不同的函数重载参数个数不同的函数重载参数类型顺序不同的函数重载三、函数重载的具体代码展示main.cpp四、为什么为什么C++支持函数重载,而C语言不支持函数重载呢前言函数重载是指在同一个作用域内,可以定......
  • C++从入门到精通——缺省参数
    缺省参数前言一、缺省参数概念二、缺省参数分类位置参数的缺省参数全缺省参数半缺省参数关键字参数的缺省参数函数指针的缺省参数`lambda`表达式三、缺省参数的具体代码展示main.cpp前言缺省参数是在函数定义时指定的默认值,当调用函数时未提供该参数的值时,将使......
  • c++基础知识
    deque的用法#include<deque>deque<type>d;//定义一个dequepush_back()//在队列的尾部插入元素。push_front()//在队列的头部插入元素。pop_back()//删除队列尾部的元素。pop_front()//删除队列头部的元素。back()//返回队列尾部元素的引用。front()//返回队列头部元素......
  • C++继承、多态代码备忘录
    HelloWorld#include<iostream>//Basedon64-bitmachines.//1.SizeofABCis16bytes,8bytesforvptr,1byteforchara,7bytes//padding.//2.ThevptrpointtothevtableofABC,thevtablecontainstheaddressof//thevirtualfunct......
  • c++类,汽车信息
    #include<iostream>#include<string>usingnamespacestd;class Car{private:      string brand;   stringmodel;   stringcolor;public:   voidcar(stringbrand,stringmodel,stringcolor)   //voidcar()括号里要有形参,不......
  • Effective C++ 导论
    芝士wa2024.3.29EffectiveC++.pdf“本书的目的在于引导你如何高效使用C++”本书的研究范围:标准的设计策略特殊语言特性的具体细节例如:如何在inheritance(继承)和templates(模板)之间选择?如何在public(公有)和privateinheritance(私有继承)之间选择?如何在member(成员......
  • C++17: 结构化绑定(Structured Bindings)
    遇到有时候写函数需要返回多个值的情况。C++17之前,只能事先定义一个结构体,然后返回这个结构体类型就可以了。但是如果你的这个结构体类型只在这个这里用一次呢。你还要抠脑壳想一个合适的结构体名字,麻烦!std::tupleC++11引入了一个新的类模板叫std::tuple,是一个容器,可以......
  • 《责任链模式(极简c++)》
            本文章属于专栏-概述-《设计模式(极简c++版)》-CSDN博客模式说明方案:责任链模式将请求的发送者和接收者解耦,构成一个链条,并由多个对象对请求进行处理,直到找到合适的处理者为止。优点:实现了请求发送者和接收者的解耦,灵活性高,易于扩展,每个处理者只需关注自......
  • 《代理模式(极简c++)》
            本文章属于专栏-概述-《设计模式(极简c++版)》-CSDN博客模式说明方案:代理模式充当了客户端和实际对象之间的中介,通过引入代理对象来控制对原始对象的访问。优点:通过代理,可以实现对目标对象的控制,提供更多的功能,例如延迟加载、访问控制、日志记录等。缺点......
  • MD5 计算 (下一代加密辅助类, Win32, C++)
    CCNGHelper.h#pragmaonce#include<string>#include<tchar.h>#include<windows.h>#include<bcrypt.h>#ifdef_UNICODEusing_tstring=std::wstring;#elseusing_tstring=std::string;#endif//下一代加密辅助类//客户端:WindowsVista及......