斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
数列第一项和第二项是1, 从第三项开始,每一项都等于前两项之和。
本题的详细要求如下:
1)实现计算斐波那契数列第n项值的方法。
定义静态方法f(int n), 参数n是数列的项数,返回值是第n项的值,
例如: f(1) 的值是1, f(6)的值是8。
2) 验证当n比较大时候,相邻两项的比值接近黄金分割比值0.618,验算 f(45)/f(46)的值大约是0.618。
数列第一项和第二项是1, 从第三项开始,每一项都等于前两项之和。
本题的详细要求如下:
1)实现计算斐波那契数列第n项值的方法。
定义静态方法f(int n), 参数n是数列的项数,返回值是第n项的值,
例如: f(1) 的值是1, f(6)的值是8。
2) 验证当n比较大时候,相邻两项的比值接近黄金分割比值0.618,验算 f(45)/f(46)的值大约是0.618。
这大概就是问题的所有内容了。
/----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
----------------------------------/
这里附上我的代码,还是新手,有好的意见可以提,觉得我写的不清楚的也可以提出来。
这题还是比较简单的,但是要注意的是n输入的数不能大于46因为47的时候超出int的范围了哦。
package MyselfDemo;
import java.util.Arrays;
import java.util.Scanner;
public class ArraysCpmpute {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入要查看的斐波那契数列的项:");
int num=scan.nextInt();
int[] sum=f(num);//调用方法,方法返回斐波那契数列
System.out.println(sum[sum.length-1]);//sum.length一定要减1,因为数组是从0开始的
while(true) {
System.out.println("请输入要判断的比例的数:");
int num2=scan.nextInt();
if(num2==-1) {//当输入为-1时结束
break;
}
int[] compute=f(num2);
double result=(double)compute[num2-2]/compute[num2-1];
System.out.println(result);
}
}
public static int[] f(int num) {//生成斐波那契数列
int[] sum= {1,1};
for(int i=0;i<num-2;i++) {
sum=Arrays.copyOf(sum,sum.length+1);//给数组扩容
sum[i+2]=sum[i]+sum[i+1];//给数组赋值
}
return sum;//返回数组
}
}