递归算法与斐波拉契数列

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值