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下运行结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值