斐波拉契数列
古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
先写出来前几个月的兔子数,分别是1、1、2、3、5、8、13、21、34......
就是这样一组数列,第三个数是前两个数的和,也就是n=(n-1)+(n-2)
#include<iostream> using namespace std; int main() { int m[23];//定义一个数组,把每个月兔子数放入 m[0] = m[1] = 1;//第一个月和第二个月都是一只兔子 for (int i = 0; i < 23; i++) { if (i == 0 || i == 1) { cout << "1" << endl;//第一个月和第二个月输出1 } else { m[i] = m[i - 1] + m[i - 2]; cout << m[i] << endl;//其他月份都是上两个月的和 } } return 0; }
或者用另一种方法
#include<iostream> using namespace std; int fun(int m) { if (m == 1 || m == 2) return 1; else return fun(m - 1) + fun(m - 2); } int main() { return 0; }
迭代
假如输入一个数n
fun(n)=fun(n-1)+fun(n-2)
fun(n-1)=fun(n-3)+fun(n-2)
fun(n-2)=fun(n-3)+fun(n-4)
.........
一直会到fun(3)=fun(1)+fun(2)=2
但是这个只能输出特定月份的兔子数