递归算法与斐波拉契数列

1递归算法题

斐波拉契数列问题 :1,1,2,3,5,8,13,21,34…
第一个月有一对兔子,每队兔子第三个月发育成熟生产出一对兔子。
使用java语言编写n个月后兔子数量(对)。

算法思路 每隔两个月 刚出生的兔子进行生殖一对兔子(假设原有兔子都不会死亡)。
那么就是f(n)=f(n-1)+f(n-2)

public static int Febo(int n) {//递归部分
    if(n==0||n==1)return 1;
    //得到当前月份的兔子数量
    else 
    return Febo(n-1)+Febo(n-2);
}
public static void main(String[] args) {//主函数 调用部分
  System.out.println("输入查询月份 n:");
  Scanner scanner=new Scanner(System.in);
  int i=scanner.nextInt();
  scanner.close();
  System.out.println("当前月份的兔子数量为:"+Febo(i)+"(对)");
}

}

2关于集合{“A”,”B”,”C”,”D”}子集求法(简易版)。
思路:使用List.addAll(List)方法合并 子集
第一步 剥离首字母A进行递归操作拆分所有 第二步将A合并到余下的子集中)
A BCD (B+CD) CD(C+D) 结果集将 合并的子集保存
第一步存入结果集的顺序 (拆分) A BCD B CD C D BC BD 8个子集(例如CD代表{{C},{D}})
第二步存入结果集的顺序 (合并组合) ABCD AB ACD AC ABC ABD 6个子集

当BCD 作为str进行 上述步骤 B CD 存入 BCD 最 后 退出时存入空集NULL 一共16个子集
public static List setCompare(String str){
List list=new ArrayList();
if(str.length()==0){//递归结束条件
list.add(null);//如果字符串为空,添加一个空集合
return list;
}
//获取str中,除去第一个元素后,子串的所有元素的子集
List subList=setCompare(str.substring(1));
for(String string:subList){//将第一个元素添加到所有子串中
if(string==null){//如果是空集
list.add(“”+str.charAt(0));
}else {
list.add(string+str.charAt(0));
}
}
list.addAll(subList);//合并这两个部分
return list;
}

3辗转相除法的java实现
求两个数的最大公约数的java算法
思路 (18, 15) 18%15=3 (18,15)=(15,3) 15%3==0跳出递归

public static int getMaxElement(int m,int n){
    int min=m<n?m:n;
    int max=m>n?m:n;
    int i=max%min;
    max=min;
    if(min%i==0)
    return i;
    else return  getMaxElement(min,i);
}
    原文作者:递归算法
    原文地址: https://blog.csdn.net/hetao_780160455/article/details/60788156
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞