#include <stdio.h> //循环的方法求出第n个斐波那契数 //1 1 2 3 5 8 13 21 34 55 //求第3个数也就是求2,需要进行一次运算 //求第4个数的时候需要运算两次 //求第五个数的时候要运算3次。 //所以求第n个数的时候,要运算n-2次 int Fib(int n) { int a = 1; int b = 1; int c = 0; //n=1或者n=2的时候,可以不进入循环,n是3的时候大于2,就进去运算 while (n > 2)//仅仅只有当n>2的时候我们才进行计算 { c = a + b; a = b; b = c; n--;//当n是3的时候—1就是2,就不满足循环的条件 }//当n是4的=时候,c=1+1=2,然后b就变成下一个运算中的a了, //第一个运算的c也变成第二个运算中的b了,然后第四个要求的数就是c了, //第一次运算的时候运行了一次n--.所以变成了3,在第二次运行的时候再次 //运行就变成2了,就停止循环了 return c; //当n=1时,不执行循环,直接返回c //当n=2时,不执行循环,直接返回c } int main() { int n = 0; scanf_s("%d", &n); int r = Fib(n); printf("%d", r); return 0; } //循环迭代---求第n个斐波那契数 int fib(int n) { if (n <= 2) { return 1; } int a = 0,b=1,c; for (int i = 2; i <= n; i++) { c = a + b;// 计算新的斐波那契数,即当前的 a 和 b 之和 //下面的两步是将斐波那契数列不断向后面推进 a = b;// 将 b 的值赋给 a,此时 a 存储 F(n-1) b = c;// 将新计算的 c 值赋给 b,此时 b 存储 F(n) } return b; //此时 b 存储 F(n) } int main() { int n; scanf("%d", &n); int ret = fib(n); printf("%d", ret); return 0; }