学习编程从做题开始(2)斐波那契数列

 斐波那契数列指的是这样一个数列  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。

这大概就是问题的所有内容了。

/----------------------------------

-----------------------------------

-----------------------------------

-----------------------------------

-----------------------------------

-----------------------------------

----------------------------------/

这里附上我的代码,还是新手,有好的意见可以提,觉得我写的不清楚的也可以提出来。

这题还是比较简单的,但是要注意的是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;//返回数组
	}
}


### 回答1: 菲波那契数列是一个数学数列,它的第一个和第二个数字都是1,接下来的每一个数字都是面两个数字的和。给定一个正整数k,你需要计算出菲波那契数列中的第k个数字是多少。这是一个非常著名的数列,被称为斐波那契数列斐波那契数列的定义如下: - 数列的第一个和第二个数字都是1。 - 接下来每个数字都是面两个数字的和。 因此,斐波那契数列几个数字是: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 如果要斐波那契数列中第k个数,可以使用递归或迭代方法计算。 ### 回答2: 菲波那契数列是一种经典的数学数列,常用于算法和编程领域。该数列的规律为:数列的第一个和第二个数都为1,从第三个数开始,每个数都等于面两个数之和。因此,该数列可以表示为1,1,2,3,5,8,13,21,34,...... 要菲波那契数列中第k个数是多少,需要先了解数列的生成方式。我们可以利用循环或递归的方式来生成该数列,在计算第k个数的时候,可以依次计算面的数,直到第k个数。下面是两种常见的计算方式: 1. 循环方式 利用循环方式,我们可以从第三个数开始,不断迭代计算数等于两个数之和,直到计算出第k个数。具体步骤如下: ① 定义变量a和b,分别赋为1; ② 使用for循环从第三个数开始计算,依次将a、b的和赋给变量c,再将a的赋给b,将c的赋给a,如下所示: ``` a = 1 b = 1 for i in range(3, k+1): c = a + b b = a a = c ``` ③ 最后输出第k个数a的即可。 2. 递归方式 另一种计算方式是使用递归方法,利用函数不断调用自身来计算数等于两个数之和,直到计算出第k个数。具体步骤如下: ① 定义一个递归函数,输入参数为当数的位置k,返回为当数的: ``` def fib(k): if k <= 2: return 1 return fib(k-1) + fib(k-2) ``` ② 在主函数中调用递归函数fib(k),传入参数k,得到第k个数的。 以上两种方式都可以计算出菲波那契数列中第k个数的。需要注意的是,由于该数列增长速度很快,当k较大时,需要使用高精度计算方法来避免溢出或精度损失的问题。 ### 回答3: 菲波那契数列是一种经典的数列,其特点是每一个数都是其两个数之和,例如数列为1、1、2、3、5、8、13、21……。数列的第一个和第二个数都是1,故第三个数为2,第四个数为3,依次类推,即可得到菲波那契数列。 如果要菲波那契数列中第K个数,有两种方法,一种是公式法,另一种是递归法。 公式法:我们可以使用以下公式得第K个菲波那契数。 F(K) = (1/sqrt(5)) * {[(1+sqrt(5))/2]^K - [(1-sqrt(5))/2]^K} 其中,^ 表示幂次运算,sqrt(5) 表示5的平方根,^K 表示将括号中的式子K次幂。 使用这个公式,我们可以轻松地计算出任意一个菲波那契数列中的数。需要注意的是,公式中sqrt(5)不能直接计算,需要使用数学库中的函数来进行计算。 递归法:另一种方法是使用递归算法解。递归算法是指将一个问题分解成若干个子问题来解,最后将子问题的结果合并起来,得到原问题的解。 在解菲波那契数列中第K个数的问题中,我们可以使用递归算法来解。具体方法如下: 1. 当K等于1或2时,返回1; 2. 当K大于2时,返回F(K-1) + F(K-2)。 这个递归算法的思路是将原问题分解成两个子问题,其中K-1和K-2分别是两个子问题的规模,然后递归地解这两个子问题,最后将子问题的解合并起来,得到原问题的解。 需要注意的是,递归算法中要考虑到递归结束的条件,否则会产生死循环。在这个问题中,递归结束的条件是K=1或K=2时,返回1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值