黑马程序员技术交流社区
标题:
菜鸟求问基础测试题Fibonacci(斐波那契)数列,
[打印本页]
作者:
叫我王大锤
时间:
2014-10-24 13:54
标题:
菜鸟求问基础测试题Fibonacci(斐波那契)数列,
/*
已知数列前10项 1,1,2,3,5,8,13,21,34,55。求前30项内第n项对应的值
*/
//按要求做的话对菜鸟难度有点大- -,我现在想这样改下。已知这个数列有30项。知道前2项的值都是1,和整个数列下一项的规律 第n项等于第(n-1)项加(n-2)项 n>2,把前30项全部打印出来。该怎么做呢 求前辈指教 谢谢了。
class arr
public static void main(String[] args)
{
int[] arr = new int[30];
new arr[0]=1;
new arr[1]=1;
for(int x=2; x<31;x++)
{
arr[x]=arr[x-1]+arr[x-2];
}
{
System.out.println("arr["+x+"]="+arr[x]+";");
}
}
}
作者:
diaolinan
时间:
2014-10-24 14:58
记得加一行
for(int x=0;x<15;x++)
{
System.out.println("arr["+x+"]---"+arr[x]);
}
作者:
wtjohn
时间:
2014-10-24 15:02
本帖最后由 wtjohn 于 2014-10-24 15:06 编辑
public class Test5 {
public static void main(String[] args) {
Fibonacci(2);
}
public static void Fibonacci(int max)
{
int[] a=new int[max];
a[0]=a[1]=1;
for(int i=2;i<max;i++)
{
a[i]=a[i-1]+a[i-2];
}
for(int i:a)
{
System.out.println(i);
}
}
}
复制代码
作者:
neokevin
时间:
2014-10-28 02:44
我回答的时候用的是递归,白天给你贴代码看看,应该很容易的
作者:
cs8630323
时间:
2014-10-28 05:57
本帖最后由 cs8630323 于 2014-10-28 06:12 编辑
static int n(int x)
{
int a[]=new int[30];
a[0]=a[1]=1;
if(a[x-2]==0) {
a[x-2]=n(x-2);
a[x-1]=n(x-1);
}
else if(a[x-1]==0) a[x-1]=n(x-1);
return a[x]=a[x-1]+a[x-2];
}
复制代码
运用了递归
作者:
Eagle
时间:
2014-10-28 06:43
我的基础测试也有这道题。还没开始做题,正在看视频。,。
作者:
Rain2692
时间:
2014-10-28 08:50
递归和递推都可以做的,递归更简单,但是效率低,递推更好一些!!
作者:
戏言丶
时间:
2014-10-28 09:21
这个用递归比较简单,因为从第三项开始该项的值都是前面两项的和
public class Demo
{
public static void main(String[] args){
for(int i=1;i<=30;i++){
System.out.println("第"+i +"项对应的值为\t"+count(i));
}
}
public static int count(int n){
int k = 0;
if(n<3){
return 1;
}
else
return count((n-1))+count(n-2);
}
}
复制代码
作者:
javaAndroid
时间:
2014-10-28 09:52
/**
* 递归
*/
static int getResByNum(int num){
if(num<=0){
return -1;
}
if(num==1||num==2){
return 1;
}
return getResByNum1(num-1)+getResByNum1(num-2);
}
复制代码
作者:
javaAndroid
时间:
2014-10-28 09:54
还有一种方法
static int getResByNum(int num){
if(num==1||num==2){ // 如果要的是第一或者第二个数字,则直接返回1。
return 1;
}
int[] temp=new int[num];
temp[0]=1;
temp[1]=1;
for(int i=2;i<num;i++){ // 依次循环,找出所需要位置上的数字。
temp[i]=temp[i-1]+temp[i-2];
}
return temp[num-1];
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2