【动态规划】递归问题&弊端
本文最后更新于 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过大,运行时间就加大。那么避免这一类的方法是什么捏?(参考下一篇【动态规划】递推)可用记忆化数组去记忆之前算过的数据然后不断的往前推进,这样就不需要从头到尾去算了。简而言之,避免递归时间过长的解决办法是不用递归。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇