遞迴問題集合

2021-07-14 16:51:56 字數 1385 閱讀 5263

遞迴問題現在一直有些不理解……

遇到的題記錄下來

1:遞迴演算法的思想

遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題。然後遞迴呼叫函式(或過程)來表示問題的解。在c語言中的執行堆疊為他的存在提供了很好的支援,過程一般是通過函式或子過程來實現。

遞迴演算法:在函式或子過程的內部,直接或者間接地呼叫自己的演算法。

2:遞迴演算法的特點:

遞迴演算法是一種直接或者間接地呼叫自身演算法的過程。在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。

遞迴演算法解決問題的特點:

(1) 遞迴就是在過程或函式裡呼叫自身。

(2) 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。

(3) 遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。所以一般不提倡用遞迴演算法設計程式。

(4) 在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位等。所以一般不提倡用遞迴演算法設計程式。

3:遞迴演算法的要求

遞迴演算法所體現的「重複」一般有三個要求:

一是每次呼叫在規模上都有所縮小(通常是減半);

二是相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入);

三是在問題的規模極小時必須用直接給出解答而不再進行遞迴呼叫,因而每次遞迴呼叫都是有條件的(以規模未達到直接解答的大小為條件),無條件遞迴呼叫將會成為死迴圈而不能正常結束。

生小兔子問題

有一對小兔子,從出生後第3個月起每個月都生一對兔子。

小兔子長到第3個月後每個月又生一對兔子。按此規律,

假設沒有兔子死亡,第乙個月有一對剛出生的小兔子,

問第n個月有多少對兔子?

經過推算發現是fibonaci(斐波那契)數列:1,1,2,3,5,8,13,21,34,55,89,144,…… 從第三項起都是前兩項的和

然後可以寫了

hduoj2018

有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請程式設計實現在第n年的時候,共有多少頭母牛?

前4年只有母牛在生所以是+1,第五年多了頭母牛就是+3,然後可以倒著想第n年的牛是由前一年所有的牛和今年新生的牛組成的,今年能生的一定是4年前的牛即n-3年的牛。

#include

using

namespace

std;

int run(int a)

int main()

int main()

int main()

}

演算法遞迴 集合的全排列問題

設集合 r 顯然全排列的數目為 n!那麼如何顯示集合的所有全排列呢?可以用遞迴的方式實現。解題思路 如果集合有n個元素,那麼就可以看作 n 1個元素全排列之後再加上 剩下的那個元素,因為是全排列,所以每乙個元素都會剩下一次。例如 r 的全排列。若 1 剩下,則 先進行排列,再與1結合,結果是 1 2...

集合劃分(遞迴演算法)

問題描述 n個元素的集合可以劃分為若干個非空子集。例如,當n 4 時,集合可以劃分為15 個不同的非空子集如下 給定正整數n,計算出n個元素的集合可以劃分為多少個不同的非空子集。其中設q n,m 表示n個數可以表示為m個非空子集。根據m和n的關係,可以分為以下情況 第一種情況 n 1時,只有乙個元素...

集合的劃分 遞迴

題目描述 設s是乙個具有n個元素的集合,s 現將s劃分成k個滿足下列條件的子集合s1,s2,sk,滿足 1 si 2 si sj 1 i,j k i j 3 s1 s2 s3 sk s 則s1,s2,sk是集合的乙個劃分。它相當於把s集合中的n個元素a1,a2,an放入k個 0 k n 30 無標號...