算法 - 递归 2019-02-13 1 分钟阅读 ARTS-A 极客时间 - 数据结构与算法之美 - 10 | 递归 递归 递归需要满足的三个条件 一个问题的解可以分解为几个子问题的解 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样 存在递归终止条件 警惕 递归代码要警惕堆栈溢出 递归代码要警惕重复计算,看下面代码 1 2 3 4 5 6 7 8 9 10 11 12 13 public int f(int n) { if (n == 1) return 1; if (n == 2) return 2; // hasSolvedList 可以理解成一个 Map,key 是 n,value 是 f(n) if (hasSolvedList.containsKey(n)) { return hasSovledList.get(n); } int ret = f(n-1) + f(n-2); hasSovledList.put(n, ret); return ret; } 将递归代码改写为非递归代码 f(x)=f(x-1)+1改写: 1 2 3 4 5 6 7 int f(int n) { int ret = 1; for (int i = 2; i <= n; ++i) { ret = ret + 1; } return ret; } f(n)=f(n-2)+f(n-1)改写: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 int f(int n) { if (n == 1) return 1; if (n == 2) return 2; int ret = 0; int pre = 2; int prepre = 1; for (int i = 3; i <= n; ++i) { ret = pre + prepre; prepre = pre; pre = ret; } return ret; }
评论