一、问题描述
1.1、什么是斐波那契数列
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89…
这个数列从第3项开始,每一项都等于前两项之和。
斐波那契数列的定义者,是意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。
他被人称作“比萨的莱昂纳多”。
1202年,他撰写了《算盘全书》(Liber Abacci)一书。
他是第一个研究了印度和阿拉伯数学理论的欧洲人。
他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点于阿尔及利亚地区,莱昂纳多因此得以在一个阿拉伯老师的指导下研究数学。
他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯等地研究数学。
另外斐波那契还在计算机C语言程序题中应用广泛
自然界的斐波那契数列
1.2、本文斐波那契数列的问题描述
斐波那契数列
问题的描述
如下几点所示
- 输出斐波那契(Fibonacci )数列的前 20 项。
- 该数列的第 1 项和第 2 项为 1 。
- 从第 3 项开始,每一项均为其前面 2 项之各和,即: 1 1 2 3 5 8 。
二、算法实例编译环境
本文C语言经典算法实例的编译环境,使用的是集成开发环境:Visual Studio 2019
Visual Studio 2019官网链接如下
Visual Studio 2019集成的开发环境的特点有
Visual Studio 2019默认安装Live Share代码协作服务。
帮助用户快速编写代码的新欢迎窗口、改进搜索功能、总体性能改进。
Visual Studio IntelliCode AI帮助。
更好的Python虚拟和Conda支持。
以及对包括WinForms和WPF在内的.NET Core 3.0项目支持等
三、算法实例实现过程
3.1、包含头文件
包含头文件 代码如下所示
#pragma once // 包含头文件 #include <stdio.h> #include <stdlib.h>
- 将要用到的C语言头文件包含近年来。
3.2、声明和定义变量
声明变量 代码如下所示。
// 声明变量。 long f1, f2, i; f1 = f2 = 1; /*前两项为 1*/
- 声明了变量f1, f2, i。
- 求斐波那契数列的前2项f1和f2赋值为1。
3.3、输出提示信息
输出提示信息 代码如下所示
// 输出提示信息。 printf("斐波那契数列(Fibonacci)的前20项有\n\n");
- 程序运行时,输出斐波那契数列相关的提示信息。
按F5进行编译,调试结果如下所示。
3.4、输出斐波那契的第1项和第2项的值
输出斐波那契的第1项和第2项的值 代码如下所示
// 输出斐波那契的第1项和输出第2项。 printf("%6d%6d", f1, f2);
- 输出斐波那契的第1项和第2项的值。
- 斐波那契的第1项和第2项的值在前面已经赋值为了1。
按F5进行编译,调试结果如下所示。
3.5、计算和输出斐波那契第3项到第20项的值
计算和输出斐波那契第3项到第20项的值,代码如下所示
/// <summary> /// 计算和输出斐波那契的第3项到第20项。 /// </summary> for (i = 3; i <= 20; i += 2) { for (i = 3; i <= 20; i += 2) { // 计算下两项 f1 = f1 + f2; f2 = f1 + f2; // 每输出十项换行 if (i % 11 == 0) { printf("\n"); } // 输出f1,f2 printf("%6d%6d", f1, f2); } } printf("\n");
- 输出斐波那契的第3项和第20项的值。
- 每输出斐波那契十项换行。
按F5进行编译,调试结果如下所示。
- 可以正确的输出斐波那契显示的效果。
3.6、对斐波那契功能进行函数模块化
- 对上面的程序进行编写一个函数:FibonacciSequence()。
- 可以掌握函数的简单用法。
3.6.1、求斐波那契数列的前20项函数声明
求斐波那契数列的前20项函数声明 代码如下所示
/// <summary> /// 求斐波那契数列的前20项函数声明 /// </summary> void FibonacciSequence();
- 声明了函数FibonacciSequence()。
- 求斐波那契数列的前20项。
3.6.2、求斐波那契数列的前20项函数定义
求斐波那契数列的前20项函数定义 代码如下所示
/// <summary> /// 求斐波那契数列的前20项的函数定义 /// </summary> void FibonacciSequence() { // 声明变量。 long f1, f2, i; f1 = f2 = 1; /*前两项为 1*/ // 输出提示信息。 printf("斐波那契数列(Fibonacci)的前20项有\n\n"); // 输出斐波那契的第1项和第2项。 printf("%6d%6d", f1, f2); /// <summary> /// 计算和输出斐波那契的第3项到第20项。 /// </summary> for (i = 3; i <= 20; i += 2) { for (i = 3; i <= 20; i += 2) { // 计算下两项 f1 = f1 + f2; f2 = f1 + f2; // 每输出十项换行 if (i % 11 == 0) { printf("\n"); } // 输出f1,f2 printf("%6d%6d", f1, f2); } } printf("\n"); }
- 定义了函数FibonacciSequence()。
- 求斐波那契数列的前20项。
3.6.3、求斐波那契数列的前20项函数的调用
- 斐波那契数列的前20项函数的调用 代码如下所示。
// 调用求斐波那契数列的前20项的函数 FibonacciSequence(); printf("\n");
按F5进行编译,调试结果如下所示。
- 可以正确的输出斐波那契的前20行。
- 没有十个数换一行显示。
四、经典算法实例程序 完整代码
经典算法实例程序完整代码如下所示
4.1、main.h文件
#pragma once // 包含头文件 #include <stdio.h> #include <stdlib.h> /// <summary> /// 求斐波那契数列的前20项函数声明 /// </summary> void FibonacciSequence();
4.2、main.c文件
#define _CRT_SECURE_NO_WARNINGS #include "Main.h" /// <summary> /// 主函数 /// </summary> /// <returns>返回0</returns> int main() { system("color 3E"); // 调用求斐波那契数列的前20项的函数 FibonacciSequence(); printf("\n"); system("pause"); return 0; } /// <summary> /// 求斐波那契数列的前20项的函数定义 /// </summary> void FibonacciSequence() { // 声明变量。 long f1, f2, i; f1 = f2 = 1; /*前两项为 1*/ // 输出提示信息。 printf("斐波那契数列(Fibonacci)的前20项有\n\n"); // 输出斐波那契的第1项和第2项。 printf("%6d%6d", f1, f2); /// <summary> /// 计算和输出斐波那契的第3项到第20项。 /// </summary> for (i = 3; i <= 20; i += 2) { for (i = 3; i <= 20; i += 2) { // 计算下两项 f1 = f1 + f2; f2 = f1 + f2; // 每输出十项换行 if (i % 11 == 0) { printf("\n"); } // 输出f1,f2 printf("%6d%6d", f1, f2); } } printf("\n"); }
五、总结
本文的C语言经典算法实例:斐波那契数列,要实现的目标如下
- 输出斐波那契(Fibonacci )数列的前 20 项。
- 该数列的第 1 项和第 2 项为 1 。
- 从第 3 项开始,每一项均为其前面 2 项之各和,即: 1 1 2 3 5 8 。
文到这里就结束啦。
希望本文的C语言经典算法实例:斐波那契数列
能激发你对C语言以及算法学习的热爱。
- 你的支持是对我最大的鼓励。