新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
斐波那契数列的定义为:f(n)=f(n-2)+f(n-1)(n1) 其中f(0)=0, f(1)=1
创新互联公司服务项目包括福安网站建设、福安网站制作、福安网页制作以及福安网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,福安网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到福安省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
#includestdio.h
long func(long n)
{
if(n==0||n==1)return n;
else return func(n-1)+func(n-2);
}
main()
{
long n;
printf("please input n:");
scanf("%ld",n);
printf("the result is %ld",func(n));
}
代码:
#includelt;stdio.hgt;
int Fib(int n){//自定义函数
if(nlt;0)
return-1;
else if(n==0)
return 0;
else if(n==1)
return 1;
else
return Fib(n-1)+Fib(n-2);
}
int main(){
int num;
printf("请输入要求取的第n项斐波那契数列n=");
if(scanf("%d",num)){
if(numgt;=0){
printf("%d",Fib(num));
}
else
printf("Error!!!");
return 0;
}
return 0;
}
扩展资料:
斐波那契数列排列组合
有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法
这就是一个斐波那契数列:登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种登法……
1,2,3,5,8,13……所以,登上十级,有89种走法。
类似的,一枚均匀的硬币掷10次,问不连续出现正面的可能情形有多少种?
答案是(1/√5)*{[(1+√5)/2]^(10+2)-[(1-√5)/2]^(10+2)}=144种。
求递推数列a⑴=1,a(n+1)=1+1/a(n)的通项公式
由数学归纳法可以得到:a(n)=F(n+1)/F(n),将斐波那契数列的通项式代入,化简就得结果。
参考资料:
百度百科——斐波那契数列
可以考虑递归算法:
int Amount(int day)
{
if (day==10)
{
return 1;
}
else
{
return 2*(Amount(day-1)+1);
}
}
早说嘛。。。害的白写了个。。
这题可以多用几个递归函数解决,在这里我称不能生育的兔子为小兔,能生育的为大兔
int littleR(int month)
{
if (month==1)
return 0;
else
return bigR(month-1)+little(month-1);
}
int bigR(int month)
{
if (month==1)
{
return 1;
}
else if (month==2)
{
return 1;
}
else if (month==3)
{
return 1;
}
else
{
return bigR(month-1)+little(month-2);
}
}
int totalR(int month)
{
return littleR(month)+bigR(month);
}
注:这种增长速度的话很快兔子的数量就会增长到很大,所以如果month达到几十的话就会超过int范围,所以可以考虑用__int64代替int,另外到时候如果依然每次都递归的话运行速度也会变慢,可能要好几秒,好几分钟,甚至更长的时间才能算出结果,所以可以考虑用数组存每个递归函数算出的值,如:
littleR(int month)中else可写成
if (...)
{
...
}
else
{
if (a[month]!=0)
return month;
else
return a[month]=bigR(month-1)+little(month-1);
}
用这种方法可以适当提高运行速度。。。
楼上说的同时执行,我愚见觉得是不对的。应该是先执行bashan(n-1),然后再执行n-2的那句。两个都是分别执行递归到计算出结果后,相加作为返回值。
也就是类似一个二叉树的先序遍历差不多的感觉。比如说,bashan(4)。执行顺序如下
bashan(4),bashan(3),bashan(2)=2
bashan(2)=2
bashan(4)=2-2=0
如果这里不存在异步多线程之类的操作,就应该从左到右,从上到下,按照顺序完成。
#include
#define
COL
5
//一行输出5个
long
fibonacci(int
n)
{
//fibonacci函数的递归函数
if
(0==n||1==n)
{
//fibonacci函数递归的出口
return
1;
}
else
{
return
fibonacci(n-1)+fibonacci(n-2);
//反复递归自身函数直到碰到出口处再返回就能计算出第n项的值
}
}
int
main(void)
{
int
i,n;
n=
17;
printf("Fibonacci数列的前%d项\n",
n);
for
(i=0;
i
{
printf("%-10ld",fibonacci(i++));
//调用递归函数并且打印出返回值
if(i%COL==0)
{
//若对COL取余等于0就换行,也就是控制每行输出多少个,
//而COL=10就是每行输出10个
printf("\n");
}
}
printf("\n");
return
0;
}