c语言求斐波那契数列的第 n 位数字

求斐波那契数列的第n位;

1.用递归的方法;

值得注意的是:使用递归的方式虽然看起来很好理解但会有很大的运算量。
(当输入一个很大的数字时不建议使用此方法)运算量呈指数式增长。

#define _CRT_SECURE_NO_WARNINGS 
#include
#include

int Fib(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	return Fib(n - 1) + Fib(n-2);
}

int main()
{
	//使用递归求第n个斐波那契数
	int n = 0;
	int ret = 0;
	printf("输入求的第n个斐波那契数");
	scanf("%d", &n);
	ret = Fib(n);
	printf("%d\n", ret);

	system("pause");
	return 0;
}
2.用函数的方法;

以下代码只写了函数部分,这部分比较难理解,特别在循环部分里,要更新变量,而且要注意变量的类型使用 long long 型才不会溢出。另外在打印时的时候注意打印类型为 ll 型。例如:

printf("%lld’,Fib_h(100));打印的是第100个数字的值,该数字为天文数字81930378546560963
【优点】这种方法虽然比较难理解,但可以减少计算机的运算量。如果用递归的方法计算第100个数字的值,恐怕得好几个小时,而循环则不到1秒.

int Fib_h(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	long long last1 = 1;//第i-1项
	long long last2 = 1;//第i-2项
	long long sum = 0;
	for (int i = 3; i <= n; ++i)
	{
		sum = last1 + last2;
		//更新last1,last2
		last2 = last1;
		last1 = sum;
	}
	return sum;
}

还有其它的的方法 比如:数组,队列,在后面的博客会继续更新。

你可能感兴趣的:(C语言基础)