算法:费波纳茨数列1 1 2 3 5 8 13 21

故事来源: 一天,皇帝骑在马上,率领着文武百官,在号兵鼓手、马队的簇拥下,浩浩荡荡向比萨市费波纳茨的居所进发。弗德烈皇帝向费波纳茨提出了这样一个问题:如果一对兔子从第二个月开始,每月可产一对兔子,试问一年后这个特定的区域里共有多少对兔子?

费波纳茨顺口回答了皇帝的问题:共有144对,并把他的计算方法说了出来——1,1,2,3,5,8,13,21,34,55,89,144,这就是费波纳茨数列的原版。根据这种计算方法,可以把这个数列无限量地扩大下去,……55,89,144,233,377,610。费波纳茨道出了一个自然地数列,后人把它叫做费波纳茨数列

斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……。这个数列从第三项开始,每一项都等于前两项之和。它的通项公式为:(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}(又叫“比内公式”,是用无理数表示有理数的一个范例。)(√5表示根号5)
在这里插入图片描述

方法一:循环实现

int fun(int n) {
	int sum = 0, tmp1=1, tmp2 = 1;

	if (n < 2)
		return 1;

	for(int i = 2; i <= n; i++) {
		sum = tmp1 + tmp2;
		tmp2 = tmp1;
		tmp1 = sum;
	}
	
	return sum;
}

方法二:递归实现

int fun(int n) {
	int sum = 0;

	if (n < 2)
		return 1;

	for(int i = 2; i <= n; i++) {
		sum = fun(i-2) + fun1(i-1);
	}

	return sum;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章