就是这个Fib什么单词我忘记了 数列是这样的 1 1 3 4 7 11 18 29 ....
本来是用的递归f(n-1)+ f(n-2) ,我前天去面试的时候,题目要求先递归然后改成循环,我想了很久没想明白,脑子进水了while 和for
本来是用的递归f(n-1)+ f(n-2) ,我前天去面试的时候,题目要求先递归然后改成循环,我想了很久没想明白,脑子进水了while 和for
解决方案 »
- myeclipse中如何配置使maven项目可以正常发布到tomcat中
- 如何通过css控制div在页面显示的大小
- The server encountered an internal error () that prevented it from fulfilling this request.
- eclipse3.2支持什么版本的jboss
- spring注入的疑问
- 为什么double类型的变量a=10,b=9.99,a-b却等于 0.009999999999999787 ????
- 简单问题?急!!!
- 关于JDBC支持SQLServer 2000 和 7.0的问题
- SpringMVC编程式事务
- Hbase类型转换?
- 数据字典
- ??lucene怎样获得查找到的字符串的那条记录??
int f[] =new int[10];
for(int i=1;i<=n;i++){
if(i==1 || i==2){
f[i]=1;
}
else{
f[i]=f[i-1]+f[i-2];
}
}
return f[n];
}
public static int fibw(int n){
int i=1;
int f[] =new int [n+1];
while (i<=n){
if(i==1 || i==2){
f[i]=1;
}
else{
f[i]=f[i-1]+f[i-2];
}
i++;
}
return f[n];
}
/**
* dinghun8leech
* @param args
*/
public static void main(String [] args) {
int count = 10;//这里填写所需输出的斐波拉契数列的长度
int [] fibonacci = new int[count];
for (int i=0;i<count;i++) {
if (i < 2) {
fibonacci[i] = 1;
} else {
fibonacci[i] = fibonacci[i-2] + fibonacci[i-1];
}
}
System.out.println(java.util.Arrays.toString(fibonacci));
}
这个么??
s=0;//和
for (i=1;i<n;i++){
if(i<2){
a[i]=1;
}
if(i==2){
a[i]=3;
}
if(i>2){
a[i]=a[i-1]+a[i-2];
}
s+=a[i];
}
while循环
int i=1;
while(i<n){
if(i<2){
a[i]=1;
}
if(i==2){
a[i]=3;
}
if(i>2){
a[i]=a[i-1]+a[i-2];
}
s+=a[i];
i++;
}
static int[] fib(int n){
int[] f = new int[n];
for( int i=0;i<f.length;i++){
if(i==0||i==1){
f[i]=1;
}else if(i==2){
f[i]=3;
}else{
f[i]=f[i-1]+f[i-2];
}
}
return f;
}
递归方法的特别之处在于他是调用自身进行循环 这能做到一些其他方式做不到的事情 但是跟循环比的话会有一些额外开销。控制必须从这个调用位置转移到方法开始处。而且还要在栈中保存这个方法的参数以及返回地址为的是这个方法可以访问参数值和知道返回到哪里。而且系统内存空间存储的中间参数以及返回值,如果有大量的数据需要存储,就会引起栈溢出。
采取递归的原因是因为它从概念上简化了问题,而不是因为它更有效率------Java数据结构和算法中文第二版我有地方也看不懂 不过你可以尝试下 递归不是效率糟糕 问题是怎么用 为什么用 他能做到普通循环做不到的事情 这是用他的原因 但是需要耗费资源(但绝对值得)