【动态规划】递归问题&弊端 2024-10-11 23:20 | 编途|C++ 本文最后更新于 36 天前,其中的信息可能已经有所发展或是发生改变。 递归问题定义 递归算法是一种算法设计方法,其中一个函数直接或间接地调用自身来解决问题。递归算法通常包含两部分:基线条件(停止递归的条件)和递归步骤(函数调用自身)。 题目描述 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? 思路分析 初始量:第一年1;第二年2;第三年3.从第四年开始每一年都是前一年和第前三年的和. 递归算法 #include <iostream> using namespace std; int cow(int n){ if(n == 1){ return 1; }else if (n == 2) { return 2; }else if(n == 3){ return 3; }else{ return cow(n-1)+cow(n-3); } } int main(){ int n; while(cin >> n&&n!= 0){ cout << cow(n) << endl; } return 0; } 弊端分析 时长过长:原因为每一次调用cow函数都需要从头到尾去推测每个数字,一旦数字n过大,运行时间就加大。那么避免这一类的方法是什么捏?(参考下一篇【动态规划】递推)可用记忆化数组去记忆之前算过的数据然后不断的往前推进,这样就不需要从头到尾去算了。简而言之,避免递归时间过长的解决办法是不用递归。 Dotcpp