【C语言】第三十六题→输入数字求对应的斐波那契数列。

275 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情

🚀write in front🚀

🔎大家好,我是泽奀,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🖊

前言

Hello,大家好我是泽奀,那么今天又到了我们这个C语言刷题系列,今天讲解的题目是一道非常经典的题目。斐波那契额数列,还在等什么打开你的编译器一起来刷题吧。

题目描述

输入数字求对应的斐波那契数列。

题目分析

在这里来讲解下什么是斐波那契数列。

斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,55,89...

自然中的斐波那契数列

这个数列从第3项开始,每一项都等于前两项之和。

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

F

(0)=0,

F

(1)=1,

F

(n)=**

F

(n - 1)+

F

(n - 2)**

但是,在这里我们不介意大家去使用递归的方式,因为:递归n次,时间复杂度O(2^n),这非常的那啥,所以,必须优化。

题目代码

#include<stdio.h>
//斐波那契数列:前两个数之和等于第三个数字
/* 1 1 2 3 5 8 13 21 34 
   a b c  
   1 2 3 4 5 6  7  8  9*/
int Fib(int n)
{
	int a = 1;
	int b = 1;
	int c = 1;

	while (n > 2)//只要求第2个以后的斐波那契数就执行while循环
	{
		c = a + b;
		a = b;
		b = c;
		n--;//n = n - 1;每次执行一次就减一直到n=2为止。
	}
	return c;
}
int main(void)
{
	int n = 0;
	int let = 0;
	printf("请输入数字:");
	scanf_s("%d", &n);
	ret = Fib(n);
	printf("ret = %d\n", ret);
	return 0;
}

递归的方法↓

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int fib(int n){
	if (n == 1 && n == 2){
		return 1;
	}
	return fib(n - 1) + fib(n - 2);
}

int main()
{
	int n = 0;
	printf("请输入要求第几个数字:");
	scanf("%d", &n);
	printf("%d\n", fib(n));	return 0;
}

运行结果

运行结果🖊

请输入数字:9

ret = 34 

最后

不知道你学会了没有,学会的扣一,没学会的扣眼珠子(doge)