题目:青蛙跳台阶
描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:众所周知,递归这种思想存在重复计算的缺陷,上篇文章我们用循环(迭代)法优化了递归算法,这次我们给递归加上缓存,同样能解决重复计算的问题。站长以为,这种方案更加符合人们思考问题的方式,也更好理解。
优化方式一:循环(迭代)法,参考:https://www.codernav.com/2806.html
优化方式二:带缓存结构的递归法
优化方案三:动态规划法,参考:https://www.codernav.com/2802.html
操作步骤:
1、定义缓存结构
2、递归方法中,先从缓存中读取数据
3、如果缓存中没有读取到数据,则使用递归算法取值
4、将递归算法取到的值放入缓存中
package od;
import java.util.HashMap;
import java.util.Map;
/**
* 青蛙跳台阶(带缓存方案)
* 问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
* 原文地址:https://www.codernav.com/2809.html
* 更多算法详解:https://www.codernav.com
*/
public class OdTest14 {
public static void main(String[] args) {
// 1.定义缓存结构
Map<Integer, Integer> cacheMap = new HashMap<>();
int way = f(10, cacheMap);
// 输出:89
System.out.println(way);
}
private static int f(int n, Map<Integer, Integer> cacheMap) {
if (n <= 2) {
cacheMap.put(n, n);
return n;
}
// 2.先从缓存中查
if (cacheMap.containsKey(n)) {
return cacheMap.get(n);
}
// 3.缓存中没有,使用递归计算
int way = f(n - 1, cacheMap) + f(n - 2, cacheMap);
// 4.加入缓存
cacheMap.put(n, way);
return way;
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...
