C语言新手练习题之求第n个斐波那契数

 更新时间:2022年11月10日 11:23:37   作者:轻轻敲醒沉睡的心灵d(ŐдŐ๑)  
斐波那契数列这一个大一上C语言就有的问题大家应该都不陌生,下面这篇文章主要给大家介绍了关于C语言新手练习题之求第n个斐波那契数的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下

前言

在C语言中,分别用递归和非递归两种方法实现求第n个斐波那契数

一、思路

首先分析一下关于斐波那契数列的原理:

第一个和第二个数都是1,之后的每个数都是前两个数之和,即:

1,1,2,3,5,8,……

1.非递归

用到了循环相关的知识,

当n>2的时候进入循环,将前两个数相加得到第三个数;

当n<=2的时候跳出循环。

2.递归

观察斐波那契数列可以得到一个公式:

gif.latex?f%28n%29%3D%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%201%20%26%20n%20%3D%201%2C2%20%26%20%5C%5C%20f%28n-1%29%20&plus;%20f%28n-2%29%26n%3E2%20%26%20%5Cend%7Bmatrix%7D%5Cright.

根据这个公式就能进行递归。当n>2的时候进行递归,当n = 1或n = 2时返回1。

二、源代码以及运行截图

为了方便大家的交流和学习,我将程序源代码和运行截图放置在下方。

非递归:

源代码:

#include<stdio.h>
//递归和非递归分别实现求第n个斐波那契数
//非递归
int main()
{
	int i = 1;
	int j = 1;
	int temp = 0;
	int n = 0;
	int fib = 0;
	scanf("%d", &n);
	while (n > 0)
	{
		if (n > 2)
		{
			temp = j;
			j = i + j;
			i = temp;
		}
		else 
			fib = j;
		n--;
	}
	printf("%d", fib);
	return 0;
}

运行截图:

f1dbc3e8d9f744e48d6e0b4214054344.png

递归:

源代码:

//递归
int Fib(int n)
{
	if (n > 2)
	{
		return Fib(n - 1) + Fib(n - 2);
	}
	else 
	{
		return 1;
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	while (1)
	{
		if (n <= 0)
		{
			printf("输入错误请重新输入:>");
		}
		else
		{
			printf("%d\n", Fib(n));
			break;
		}
	}
	return 0;
}

运行截图:

f717f956eea348309b381ae30c07805b.png

总结

以上就是今天要讲的内容,本文简单的介绍了用C语言如何求解第n个斐波那契数的两种思路,还进一步展示了代码的运行结果验证了作者的思路。

到此这篇关于C语言新手练习题之求第n个斐波那契数的文章就介绍到这了,更多相关C语言求第n个斐波那契数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言版停车位管理系统

    C语言版停车位管理系统

    这篇文章主要为大家详细介绍了C语言版停车位管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++实现哈夫曼编码

    C++实现哈夫曼编码

    这篇文章主要为大家详细介绍了C++实现哈夫曼编码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 求32位机器上unsigned int的最大值及int的最大值的解决方法

    求32位机器上unsigned int的最大值及int的最大值的解决方法

    本篇文章是对求32位机器上unsigned int的最大值及int的最大值的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言编程使用MATLAB绘制椭圆及圆角矩形

    C语言编程使用MATLAB绘制椭圆及圆角矩形

    这篇文章主要为大家介绍了C语言编程中使用MATLAB绘制椭圆及圆角矩形的实现源码,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02
  • C/C++深入讲解内存管理

    C/C++深入讲解内存管理

    本章主要介绍C语言与C++的内存管理,以C++的内存分布作为引入,介绍C++不同于C语言的内存管理方式(new delete对比 malloc free),感兴趣的朋友来看看吧
    2022-05-05
  • C++解决合并两个排序的链表问题

    C++解决合并两个排序的链表问题

    本文主要介绍了通过C++解决合并两个排序的链表并使新链表中的节点仍然是递增排序的。文中代码讲解详细,有需要的朋友可以参考一下
    2021-12-12
  • C语言实现简易的三子棋小游戏

    C语言实现简易的三子棋小游戏

    这篇文章主要为大家详细介绍了C语言实现简易的三子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++类URL编码和解码使用技巧

    C++类URL编码和解码使用技巧

    在项目开发过程中,经常会使用到c++ 的url编码和解码,本文将以此问题详细介绍使用技巧,需要的朋友可以参考下
    2012-11-11
  • OpenCV实现可分离滤波

    OpenCV实现可分离滤波

    这篇文章主要为大家详细介绍了OpenCV实现可分离滤波,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++之vector容器的的声明初始化和增删改查

    C++之vector容器的的声明初始化和增删改查

    这篇文章主要给大家介绍了关于C++vector容器的的声明初始化和增删改查的相关资料,向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container),跟任意其它类型容器一样,它能够存放各种类型的对象,需要的朋友可以参考下
    2021-07-07

最新评论