众所周知,递归算法是在java学习中一定会遇到的问题。
规律化递归问题可以总结为三要素来进行解决:
- 终结点
- 公式
- 方向(递归算法的方向一定是指向终结点的)
而非规律化递归问题是没有章法可寻的 只能靠自己来创建解决的逻辑
代码演示
package com.fudao.digui;
/*目标:非规律化递归
* 啤酒问题
* 一个人有10元钱,一瓶啤酒2元,2个瓶子可以换一瓶酒,4个盖子可以换一瓶酒,
* 问 喝酒总数 和剩余瓶子数 和剩余盖子数 15 1 3
*
* 核心问题解决方式就是 将瓶子和盖子都转换成钱 再去买酒即可*/
public class BeerDome {
public static int totalNum;//喝酒总数
public static int lastPingziNum;//剩余的瓶子数
public static int lastGaiziNum;//剩余的盖子数
public static void main(String[] args) {
buyBeer(10);
System.out.println(totalNum);
System.out.println(lastPingziNum);
System.out.println(lastGaiziNum);
}
public static void buyBeer(int money) {
//每一轮喝酒的数量
int num = money/2;
//累加到总喝酒数
totalNum+=num;
//当前的瓶子总数
int pingZi = num+lastPingziNum;
//当前的盖子总数
int gaiZi = num + lastGaiziNum;
//当前的钱数
int totalMoney =(pingZi/2)*2+(gaiZi/4)*2;
//剩余的盖子数
lastGaiziNum=gaiZi%4;
//剩余的瓶子数
lastPingziNum =pingZi%2;
//如果钱数大于等于2,那么就可以继续买酒
if(totalMoney>=2){
buyBeer(totalMoney);
}
}
}
以上就是非规律化递归的例子