用java程序编写菲薄拉契数列:1,1,2,3,5,8,13…….的第n项,n由键盘输入
2个回答
2012-10-30 · 知道合伙人数码行家
关注
展开全部
下面是通过递归实现的计算前20项的代码,如果要计算前100项,只需要把主方法里面的20改成100就行。如果没必要的话,建议你不要计算前100项,因为数据太过庞大。
public class SumFib {
public long fid(int n){
if((n==1)||(n==2)){
return 1;
}
else{
return fid(n-1)+fid(n-2); //递归调用
}
}
public void prinSum(int n){
long sum=0L;
for(int i=1;i<=n;i++){
sum+=fid(i); //求和
//System.out.println(fid(i));
}
System.out.println(sum);
}
public static void main(String[] args) {
new SumFib().prinSum(100); //实例化匿名对象并调用求和方法
}
}
public class SumFib {
public long fid(int n){
if((n==1)||(n==2)){
return 1;
}
else{
return fid(n-1)+fid(n-2); //递归调用
}
}
public void prinSum(int n){
long sum=0L;
for(int i=1;i<=n;i++){
sum+=fid(i); //求和
//System.out.println(fid(i));
}
System.out.println(sum);
}
public static void main(String[] args) {
new SumFib().prinSum(100); //实例化匿名对象并调用求和方法
}
}
追问
n用键盘输入是不是要用到scanner呢?
追答
是的,你可以再修改下 main
展开全部
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("please input: ");
int n=sc.nextInt();
n=(int) (1/Math.sqrt(5)*(Math.pow((1+Math.sqrt(5))/2, n)-Math.pow((1-Math.sqrt(5))/2, n)));
System.out.println(n);
}
Scanner sc=new Scanner(System.in);
System.out.println("please input: ");
int n=sc.nextInt();
n=(int) (1/Math.sqrt(5)*(Math.pow((1+Math.sqrt(5))/2, n)-Math.pow((1-Math.sqrt(5))/2, n)));
System.out.println(n);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询