一起养成写作习惯!这是我参与「掘金日新计划 · 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)