Java教程

斐波那契数列(fib)

本文主要是介绍斐波那契数列(fib),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目:求取斐波那契数列(fib)的第n项

思路:规律为前两项的和为第三项,设置前一项,前两项变量和当前的变量,前两项的变量相加

我的踩坑点:int fib(int n){}中必须包含有返回值,返回cur

                  :循环比递归好使

代码1:递归调用

#include <stdio.h>
int fib(int n) {
    //先设置特殊位置的值
	if (n == 1 || n == 2) {
		return 1;
	}
    //第i项的值等于(i-1)+(i-2)的和
	return fib(n - 1) + fib(n - 2);
}
int main() {
	printf("%d\n", fib(8));
	return 0;
}

缺点:运算一直在重复,导致计算很慢

改正:计算下一项时,前面算过的值,直接用上次的计算结果而不是重复计算,采用循环数列

#include <stdio.h>
int fib2(int n) {
	if (n == 1 || n == 2) {
		return 1;
	}
	int last2 = 1;//第i-2项
	int last1 = 1;//第i-1项
	int cur = 0;//第i项
	for (int i = 3; i <= n; i++) {
        //一定要及时更新变量
		cur = last1 + last2;
		last2 = last1;
		last1 = cur;
	}
	return cur;
}
int main() {
	printf("%d\n", fib2(6));
	return 0;
}

直接打印此数列

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(){
	int last2 = 1;//第i-2项
	int last1 = 1;//第i-1项
	int cur = 0;//第i项
	int count;//斐波那契的个数
	printf("请输入斐波那契的个数:");
	scanf("%d", &count);
	printf("%d %d\n",last1,last2);//先优先输出前两项的值
	for(int i = 2; i < count; i++) {
		cur = last1 + last2;
		last2 = last1;
		last1 = cur;
		printf("%d ", cur);
	}
	return 0;

}

这篇关于斐波那契数列(fib)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!