每天一练——斐波那契数列前N项之和

什么是斐波那契数列?

斐波那契数列就是前两项之和会等于第三项。

斐波那契数列通常以一为起始 :1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597……

正如我所说的前两项之和会等于第三项以此类推,那么我们要以什么方式来进行代码编写呢!方法如下:

先赞后看知识牢于心哦!!! 

目录

计算思路

 1.用递归的方式求出斐波那契数列

 2.使用循环计算斐波那契数列

结尾


计算思路

首先你要知道你要求的项是多少,例如:第N项,我们知道要求第N项就要求N的前两项之和才会等于N。所以(n-1)+(n-2)=n,N-1就是N的前一项,N-2就是N的前两项。那就可以知道N是怎么来的,那(n-1)中的N又是怎么来的呢!?也是(n-1-1)+(n-2-1)=(n-1)因此我们要以此类推一直找到第一项和第二项之和才会得到第三项。所以你要一直找到1 1才会得2 ,1 2才会得3。

设定一个函数  fbnq 

判断第一项和第二项是否为1,为1则返回1.不为1则继续找1.

用return 返回找到的斐波那契数再用循环一次打印出来

再循环中设一个sum来计算返回前N项和的值,最后打印输出

 1.用递归的方式求出斐波那契数列

运用递归的思想,求斐波那契数列前n项之和(n作为函数参数传递)。

①斐波那契数列的前六项:1,1,2,3,5,8

②斐波那契数列的前六项之和为:20

(规律:斐波那契数列第一项和第二项都为1,从第三项开始之后的每一项都等于其前两项之和)

#include<stdio.h>
int fbnq(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	else
	{
		return fbnq(n - 1) + fbnq(n - 2);
	}
}
int main()
{
	int n;
	int sum = 0;
	scanf("%d", &n);
	printf("斐波那契数列:");
	for (int i = 1; i <= n; i++)
	{
		printf("%d ", fbnq(i));
		sum += fbnq(i);
	}
	printf("nsum=%dn", sum);
	return 0;
}

 缺点:递归的运算效率太慢,输入一个较大的值的时候需要等待,所以一般情况下。题目不要求递归的使用就用循环来解决,下面是使用循环的方法:

值太大的话两种方法都会溢出,但是循环可以大大加快运算的效率

同时输入100项就可以知道差距啦!

 2.使用循环计算斐波那契数列

#include<stdio.h>
int fbnq(int n);//使用声明
int main()
{
	int n;
	int num = 0;
	int sum = 0;
	scanf("%d", &n);
	num = fbnq(n);
	printf("斐波那契数列:");
	for (int i = 1; i <=n; i++)
	{
		printf("%d ", fbnq(i));
		sum += fbnq(i);//计算N前项之和
	}
	printf("nsum=%dn", sum);
	return 0;
}
int fbnq(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	int n1 = 1;
	int n2 = 1;
	int num = 0;
	for (int i = 3; i <= n; i++)//第一项和第二项都是1,所以i要从第三项开始
	{
		num = n1 + n2;
		n2 = n1;
		n1=num;
	}
	return num;
}

结尾

今天的分享就到这里了,请点下你们手中的赞吧!你们的支持对我有这重大的认可,后面才会更加有动力分享哦!

谢谢你的观赏!

我是Try_harder,正在磕磕绊绊中成长~~

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>