递归之母牛
来源:互联网 发布:python可以用来做什么 编辑:程序博客网 时间:2024/06/01 08:03
package com.lyk.kk;/** * Created by Administrator on 2017/9/6. * 假设农场中有成熟的母牛每年只会生1头小母牛,并且永不会死。第一年农场有1只成熟的母牛, * 从第二年开始,母牛开始生小母牛,每只小母牛三年之后成熟又可以生小母牛,给定正数N, * 求出N年后的牛的数量。。 * 所有的牛都不会死,所以第n-1年的牛会毫无损失地活到第n年。同时。所有成熟的牛都会生1头新的牛, * 那么成熟的牛的数量就是第n-3年的所有牛,到第n年的肯定都是成熟的牛。其间出生的牛肯定都没有成熟。 * 所以C(N)=C(N-1)+C(N-3). * 初始项 C(1)==1 C(2)==2 C(3)==3 * 与斐波那契特别类似。 */public class A3 { //暴力递归 public int c1(int n){ if(n<0) return 0; if(n==1||n==2||n==3) return n; return c1(n-1)+c1(n-3); } //olog(n) //C(N)=C(N-1)+C(N-3).是一个三姐递推数列,一定可以用矩阵乘法的形式表示。且状态矩阵为3*3矩阵 public int c3(int n){ if(n<0) return 0; if(n==1||n==2||n==3) return n; int [][] base={{1,1,0},{0,0,1},{1,0,0}}; int [][]result=matrixPower(base,n-2); return 3*result[0][0]+2*result[1][0]+result[2][1]; }//矩阵相乘 public int[][] muliMatrix(int [][]m1,int [][]m2){ int [][]result=new int[m1.length][m2[0].length]; for(int i=0;i<m1.length;i++){ for(int j=0;j<m2[0].length;j++){ for(int k=0;k<m2.length;k++){ result[i][j]+=m1[i][k]*m2[k][j]; } } } return result; } //矩阵的n次幂 public int[][] matrixPower(int [][]m,int p){ int [][]result=new int[m.length][m[0].length]; for(int i=0;i<result.length;i++){ result[i][i]=1; } int [][]temp=m; for(;p!=0;p>>=1){ if((p&1)!=0){ result=muliMatrix(result,temp); } temp=muliMatrix(temp,temp); } return result; }}
阅读全文
0 0
- 递归之母牛
- 递归递推之母牛的故事
- ACM-递归之母牛的故事——hdu2018
- 母牛问题(非递归)
- 母牛的故事(递归)
- 母牛的故事(递归)
- 兔子、母牛繁殖问题(递归、非递归)
- 递归求解母牛生小牛问题
- 兔子和母牛递归问题的总结
- hdoj-2018 母牛的故事【水&&递归】
- [2018]:母牛的故事(类递归)
- hdoj 2018 母牛的故事 (递归)
- 母牛的故事(递归+水)
- 递归递推-A-母牛的故事
- 递推递归-A-母牛的故事
- 递推递归--A母牛的故事
- 递归求解n年后的母牛数量
- 母牛生仔的递归算法和非递归算法。
- 03_Begin块
- Vue全局API
- Visual Studio 2017 自定义项目模板
- 矩阵按键
- WWAC radio station
- 递归之母牛
- hdu1016 DFS+素数判断
- JavaScript将页面表格数据导出为Excel、CSV格式文件(结合JQuery EasyUI的grid )
- Ubuntu16.04+CUDA8.0+CUNN5.1+caffe+tensorflow+Theano
- HDU5860-Death Sequence
- LeetCode题解系列--4. Median of Two Sorted Arrays
- 【MPI学习2】MPI并行程序设计模式:对等模式 & 主从模式
- 统一设置ajax的参数信息
- Java实现循环冗余码(CRC)生成算法