递推算法。

递推法的特点:(用for循环推导)

       递推法的核心在于找到递推关系式。这种方法可以将复杂的计算过程转化为简单的重复步骤。充分利用计算机在运行过程的时间局部性和空间局部性。

递推法的思想:

  1. 首先找到各个相邻数据项的递推关系。
  2. 递推关系避开了求通项公式的麻烦,尤其是对于难以理解和无法求解通项公式的题目。
  3. 将复杂的问题分解成若干个简单运算。
  4. 一般说,递推算法可以视为一种特殊的迭代算法
  5. 例题斐波纳契数列fibonacci问题
    斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
    指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、...
    在数学上,斐波那契数列以如下被以递推的方法定义:F(0)= 0,F(1) =1, F(n)= F(n-1)+F(n -2) (n ≥ 2, n ∈N*)请求出该数列中第n个数字(n从1开始计数)是多少。
    import java.util.Scanner;
    public class Main {
    //1.确定数据项,找到符合要求的递推式
    //2.根据递推式设计递推程序(for循坏)
    //3.根据题目找到递推的终点
    //4.单次查询不存储,多次查询要存储
    /*斐波纳契数列fibonacci问题
    斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
    指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、...
    在数学上,斐波那契数列以如下被以递推的方法定义:F(0)= 0,F(1) =1, F(n)= F(n-1)+F(n -2) (n ≥ 2, n ∈N*)请求出该数列中第n个数字(n从1开始计数)是多少。*/
    	public static void main(String[] args) {
    		//递推关系式: 当你>=2时递推关系式 F(n)= F(n-1)+F(n -2)  (n ≥ 2, n ∈N*)
    		//F(0)= 0,F(1) =1,										↓
    		int n;//第n个数					后一个数等于前两个数的和=F(n+2)=F(n)+F(n+1)
    		int x=0;//F(n)    初始化相当于F(0)=0                                   //=ans=x+y
    		int y=1;//F(n+1)	初始化相当于F(1)=1
    		int ans=0;//F(n+2)	可以用递推式,所以初始化=0
    		Scanner in=new Scanner(System.in);
    		n=in.nextInt();
    		if(n==0) {
    			ans=0;
    		}else if(n==1) {
    			ans=1;
    		}else {
    			for(int i=2;i<=n;i++) {
    			ans=x+y;//i+1,x,y和ans同样也往后移一位
    			x=y;
    			y=ans;
    		}
    		}
    		System.out.println(ans);
    	}
    
    }
    

    题目描述:
    斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称数列"。
    指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、...
    在数学上,斐波那契数列以如下被以递推的方法定义:F(0)= 0,F(1) = 1. F(n) = F(n-1)+F(n-2) (n ≥ 2, n ∈ N*)
    我们将进行M次查询,每次输入一个N,其中n小于30。请求出该数列中第n个数字(n从1开始计数)是多少?

    import java.util.Scanner;
    public class test {
    	//1.确定数据项,找到符合要求的递推式
    	//2.根据递推式设计递推程序(for循坏)
    	//3.根据题目找到递推的终点
    	//4.单次查询不存储,多次查询要存储
    	static int [] F=new int [35];
    	static void init() {//定义函数,用于存储斐波那契数列
    		F[0]=0;
    		F[1]=1;
    		for(int i=2;i<=30;i++) {
    			F[i]=F[i-1]+F[i-2];
    		}
    	}
    	public static void main(String[] args) {
    /*
    题目描述:
    斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称数列"。
    指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、...
    在数学上,斐波那契数列以如下被以递推的方法定义:F(0)= 0,F(1) = 1. F(n) = F(n-1)+F(n-2) (n ≥ 2, n ∈ N*)
    我们将进行M次查询,每次输入一个N,其中n小于30。请求出该数列中第n个数字(n从1开始计数)是多少?
    */
    		int m;//查询m次
    		int n;//第几个数字
    		Scanner in=new Scanner(System.in);
    		m=in.nextInt();
    		init();
    		while(m>0) {//用于循环输入n
    			m=m-1;
    			n=in.nextInt();
    			System.out.println(F[n]);//输入多少次n,输出多少次F[n]
    		}
    		
    	}
    
    }
    

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值