#include <stdio.h> //求斐波那契数列,当求第n个数时,数为多少? //1 1 2 3 5 8 13 21....... //思路1:先写逻辑,用递归方法,当求第n个数时,数为多少?这个数列得前俩个相同,把他分开;大于2时Fib(n-1)+Fib(n-2) //思路2:先写逻辑,当我们的数字逐渐增大时,用递归的方法会造成计算上的重复,因此我们用循环的方法进行求解, // 前边2位数相同,当大于2时,我们将前三个数,设为a<b<c得顺序,即c=a+b,每次进入循环,让a = b; b = c;n--;实现相加, // 问:n--;目的是? // 答:我们正常计算循环,比如要计算第4个数我们怎么计算,(1+1=2;)这个式子被算过了 (1+2=3;)我们只求这一个式子 // 我们如果用Fib(n-1)+Fib(n-2)就要计算2^4次,Fib(3)+Fib(2).... int Fib(int n);//递归 int Fib_while(int n);//循环 int main() { int ret; int n; scanf("%d",&n); //ret = Fib(n); //递归算法 ret = Fib_while(n); printf("%d",ret); } int Fib_while(int n) //循环 { //1 1 2 3 5 8 13 21 //a b c // a b c //... int a = 1; int b = 1; int c = 1; while(n>2) { c = a + b; a = b; b = c; printf("-----%d",n); n--; //让算过的数,不要再计算了,因为前边n-1个数已经算过了 } if(n < 2) { return 1; } return c; } int Fib(int n) //思路1 { if(n>2) { return Fib(n-1) + Fib(n-2); } else { return 1; } }
求斐波那契数列
最新推荐文章于 2024-10-07 09:58:35 发布