publicstaticvoiddemo1(){//用数组做不死神兔int[] arr =newint[12];//数组中第一个元素和第二个元素都为1
arr[0]=1;
arr[1]=1;//遍历数组对其他元素赋值for(int i =2; i < arr.length; i++){
arr[i]= arr[i -2]+ arr[i -1];}//如何获取最后一个数
System.out.println(arr[arr.length -1]);}
//用递归求斐波那契数列publicclassMain{publicstaticvoid main (String[] args){
System.out.println(getNum(12));}publicstaticintgetNum(int month){if(month <=2){return1;}else{returngetNum(month -1)+getNum(month -2);}}}
六、递归练习:求出1000的阶乘所有0和尾部0的个数,不用递归
因为1000的阶乘远远超出了int的取值范围,所以要用BigInteger
import java.math.BigInteger;publicclassMain{publicstaticvoid main (String[] args){
BigInteger bi1 =newBigInteger("1");for(int i =1; i <=1000; i++){
BigInteger bi2 =newBigInteger(i+"");
bi1 = bi1.multiply(bi2);}
String str = bi1.toString();// 获取字符串表现形式int count =0;for(int i =0; i < str.length(); i++){if('0'== str.charAt(i)){//如果字符串中出现0字符,计数器加1
count++;}}
System.out.println(count);//所有0
StringBuilder sb =newStringBuilder(str);
str = sb.reverse().toString();//链式编程int num =0;for(int i =0; i < str.length(); i++){if('0'!= str.charAt(i)){break;}else{
num++;}}
System.out.println(num);// 尾部0}}
七、递归练习:求出1000的阶乘所有0和尾部0的个数,用递归
publicclassTest7{publicstaticvoidmain(String[] args){
System.out.println(fun(1000));}publicstaticintfun(int num){if(num >0&& num <5){return0;}else{return num /5+fun(num /5);}}}
八、集合练习:约瑟夫环,幸运数字
N个人围成一圈,从第一个开始报数,第M个或M的倍数个将被杀掉,最后剩下一个,其余人都将被杀掉。
构成一个环:利用指针值,当指针指向size的时候就归0重新开始
import java.util.ArrayList;publicclassMain{publicstaticvoid main (String[] args){
System.out.println(getLucklyNum(8));}/*
*获取幸运数字
* 1.返回值类型int
* 2.参数列表int num
*/publicstaticintgetLucklyNum(int num){
ArrayList<Integer> list =newArrayList<>();//创建集合存储1到num的对象for(int i =1; i <= num; i++){
list.add(i);//将1到num存储在集合中}int count =1;//用来数数,只要是三的倍数就杀人for(int i =0; list.size()!=1; i++){//只要集合中人数超过1就要杀if(i == list.size()){//如果i增长到集合最大的索引加1时重新归0
i =0;}if(count %3==0){//如果是3的倍数就杀人
list.remove(i--);}
count++;}return list.get(0);}}