做网站一定要有服务器吗,仿团购网站模板,外国英文设计网站,长沙服务好的网络营销1.什么是斐波那契数列#xff1a;
斐波那契数#xff0c;亦称之为斐波那契数列#xff08;意大利语#xff1a; Successione di Fibonacci)#xff0c;又称黄金分割数列、费波那西数列、费波拿契数、费氏数列和兔子数列#xff0c;指的是这样一个数列#xff1a;0、1、…1.什么是斐波那契数列
斐波那契数亦称之为斐波那契数列意大利语 Successione di Fibonacci)又称黄金分割数列、费波那西数列、费波拿契数、费氏数列和兔子数列指的是这样一个数列0、1、1、2、3、5、8、13、21、……在数学上斐波纳契数列以如下被以递归的方法定义F00F11FnF(n-1)F(n-2)n2n∈N*用文字来说就是斐波那契数列列由 0 和 1 开始之后的斐波那契数列系数就由之前的两数相加。 学习内容
这里我们针对以1,1,为前两项的斐波那契数列1,1,2,3,5,8,13……某一项即为前两项的和这里介绍三种方法来实现它
1.迭代法
long fac(int x)//迭代
{int i;int a 1;int b 1;int c 0;for (i 0; i x - 2; i){c a b;a b;b c;}return c;
}
int main()
{int a;scanf(%d, a);printf(%d, fac(a));return 0;
}
我们先将前两个1储存在a,b中在第一个循环中c接收了a和b的和再让a接收b的值b接收c的值。如此循环往复x-2次最终c的值即为fx.
在这过程中a,b值的更新是为了令afx-2,bf(x-1).所需循环次数由下得出
求第三项只需进行一次循环即进行一次相加
求第四项进行两次循环即进行两次相加
求第五项进行三次循环即进行三次相加
……
不难看出求第x项时就需要进行x-2次循环了 2.线性递归法
int fac(int x)//线性递归
{if (x 1 || x 2)return 1;elsereturn fac(x - 2) fac(x - 1);
此种方法很简单就是根据数学定义按部就班F11F21FnF(n-1)F(n-2)n3n∈N*
3.尾递归
int fun(int n,int a,int b)
{if(n3)return b;else
return fun(n-1,b,ab);
}
int main()
{
printf(%d,fun(5,1,1));
return 0;
}
我们来验证一下fun函数的功能首先传参时必须保证形参ab都接收1传递5,1,1,过程如下
fun(4,1,2)
fun(3,2,3)
fun(2,3,5)
当n-12时函数就会返回第三形参——5