C语言用递归+循环迭代2种方法求斐波拉契数列(前n项和,第n项值,打印前n项)

什麽是斐波拉契数列?

斐波拉契数列特点是第N项总是等于前两项之和;

一般是从第一项和第二项都是1开始:例如

1 1 2 3 5 8 13 21 34 55 59....................

求解斐波拉契数列一直是C语言基础的常见问题,一般题目大概分为三种:

问题1.编写一个程序,用户输入整数 N,程序输出第 N 项斐波那契数;

如输入N=7 ,运行结果是:13

问题2.编写一个程序,用户输入整数 N,程序打印前 N 项斐波那契数;

如输入N=7 ,运行结果是:1 1 2 3 5 8 13

问题3.编写一个程序,用户输入整数 N,程序输出前 N 项斐波那契数之和;

如输入N=7 ,运行结果是:1 + 1 + 2 + 3 + 5 + 8 + 13 = 33

这三类问题其实解法都一样,求解方法有两种,迭代法(又称循环法)和递归法;

 

方法一:迭代法(又称循环法)*************************

#include<stdio.h>

//迭代法(循环法)
int main()
{
	int n = 0,n_dis=0,total=0;
	int ret = 0;
	int bef1 = 1;
	int bef2 = 0;
	printf("输入要求的斐波拉契数列项数:");
	scanf("%d", &n);
	n_dis = n;
	while(n>0)
	{
		n = n - 1;
		bef2 = bef1;
		bef1 = ret;
		ret = bef1 + bef2;
		total = total + ret;//计算前n项和
		printf("%d\n", ret);//如果不需要打印前n项每个数,则删除这句
	}
	printf("第%d项 = %d\n",n_dis,ret);
	printf("前%d项和 = %d\n",n_dis,total);
	return 0;
}

linux下运行结果:

方法一:递归法*************************

#include<stdio.h>

//递归法
int fibonacci(int n)//可以求出第n项的值
{
    if(n<=0)//检测输入不对的数
    {
        return 0;
    }
	if(n==1 || n==2)
	{
		return 1;
	}
	return fibonacci(n-1) + fibonacci(n-2);
}

int main(void)
{
	int n = 0,total=0;;
	int i = 1;
	int ret = 0;
	printf("输入要求的斐波拉契数列项数:");
	scanf("%d", &n);
	for(i=1;i<=n;i++)
	{
		ret = fibonacci(i);
		total = total + ret;//计算前n项和
		printf("%d\n",ret);//如果不需要打印前n项每个数,则删除这句
	}
	printf("第%d项 = %d\n",n,ret);
	printf("前%d项和 = %d\n",n,total);	
	return 0;
}

linux下运行结果:

【问题描述】 【问题描述】编写函f,功能是用递归方法斐波那契数列的第n,函原型为 int f(int n),在主函输入一个正整n,调用函f斐波那契数列的第n,并在主函中输出。 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函f,功能是用递归方法斐波那契数列的第n,函原型为 int f(int n),在主函输入一个正整n,调用函f斐波那契数列的第n,并在主函中输出。 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函f,功能是用递归方法斐波那契数列的第n,函原型为 int f(int n),在主函输入一个正整n,调用函f斐波那契数列的第n,并在主函中输出。 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函f,功能是用递归方法斐波那契数列的第n,函原型为 int f(int n),在主函输入一个正整n,调用函f斐波那契数列的第n,并在主函中输出。 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 斐波那契数列1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值