编写一个程序,利用递归函数求斐波那契数列(0,1,1,2,3,5,8,13,21…… )前100项的和
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个程序,利用递归函数求斐波那契数列(0,1,1,2,3,5,8,13,21…… )前100项的和相关的知识,希望对你有一定的参考价值。
用递归函数求,C++题目。
谢谢!
第二,这个当数列到了40多项的时候,用int型或者__int64都是装不下的。所以后面的数据会是错误的。因此,此题又涉及到高精度的问题了。用高精度来写递归的加法。这样的话时间复杂度就更大了。估计得跑几个小时吧。
这里给你个简单的递归的求出前30项的和。如果真的要100项的话只能用高精度来写了。估计也不一定有人会帮你写。
简单的递归程序(即不考虑超出int型范围的情况)如下:
#include<iostream>
using namespace std;
int f(int n)
if(n==0) return 0;
if(n==1) return 1;
return f(n-1)+f(n-2);
int main()
int i,sum=0;
for(i=0;i<30;i++)
sum+=f(i);
cout<<sum<<endl;
参考技术A 因为用了很没有效率的递归,所以出结果有点慢
#include<iostream.h>
f(int);
main()
int i,s=0;
for(i=1;i<=100;i++)
cout<<f(i)<<'\t';
s+=f(i);
cout<<endl;
cout<<"前100项的和为"<<s<<endl;
f(int i)
int value;
if(i==1||i==2)
value=1;
else
value=f(i-1)+f(i-2);
return value;
本回答被提问者采纳 参考技术B 答案为1.可以从第三位与第一位的差为1,第四位与前两位的和,差为1,以此类推,得100项与前98项之和的差是1. 参考技术C #include <iostream>
#include <math.h>
using namespace std;
int main()
float f1,f0,f,fsum;
int i;
f=1;f1=1,f0=0;
fsum=f0+f1;
for(i=2;i<100;i++)
fsum=fsum+f;
f0=f;
f=f+f1;
f1=f0;
printf("%21.0f\n",fsum);
return 0;
参考技术D int fib(int n)
switch(n)
case 0:return0;break;
case 1:
case 2:return 1;break;
default:return fib(n-1) + fib(n-2);break;
return -1;
int main(void)
int i,j=0;
for(i = 0; i< 100; ++i) j += fib(i);
printf("%d\n", j);
return 0;
我想用递归写斐波那契数列,c语言
#include <stdio.h>
int s(int m);
int main (void)
int n, i = 0;
int x;
scanf ("%d", &n);
while (i < n)
scanf ("%d", x);
printf ("%d", s(x));
return 0;
int s(int m)
int f1 = 1;
int f2 = 1;
if (m = 1)
return 1;
else
return (f1 + f2);
f1 = f1 + f2;
f2 = f1 + f2;
m--;
哪里错了
代码:
#include<stdio.h>
int Fib(int n)//自定义函数
if(n<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(num>=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),将斐波那契数列的通项式代入,化简就得结果。
参考资料:
百度百科——斐波那契数列
没怎么看懂你的递归,我给你写了一个,你参考参考
#include <stdio.h>int fun(int n)
if(n==1 || n==2)
return 1;
else
return fun(n-1) + fun(n-2);
int main(void)
int n,i=0;
printf("请输入要输出数列的前多少项:");
scanf("%d",&n);
if(n>=1)
for(i=0;i<n;i++)
printf("Fibonacci数列的第%3d项是:%d\\n",i+1,fun(i+1));
else
printf("输入错误!请重新输入......\\n");
return 0;
本回答被提问者采纳 参考技术B 没怎么看懂你的递归,我给你写了一个,你参考参考
#include
<stdio.h>
int
fun(int
n)
if(n==1
||
n==2)
return
1;
else
return
fun(n-1)
+
fun(n-2);
int
main(void)
int
n,i=0;
printf("请输入要输出数列的前多少项:");
scanf("%d",&n);
if(n>=1)
for(i=0;i<n;i++)
printf("fibonacci数列的第%3d项是:%d\n",i+1,fun(i+1));
else
printf("输入错误!请重新输入......\n");
return
0;
参考技术C 执行完 return ,return 后面的语句就不执行了。
其实可以这么写嘛
int fib(int n)
if(n<=2)
return 1 ;
else
return fib(n-1) + fib(n-2) ;
我只是大概写一下 , 细节自己把握一下吧 参考技术D scanf ("%d", x);
没&号
以上是关于编写一个程序,利用递归函数求斐波那契数列(0,1,1,2,3,5,8,13,21…… )前100项的和的主要内容,如果未能解决你的问题,请参考以下文章