演算法 遞迴(例 炫耀手機)

2021-10-14 15:19:06 字數 1135 閱讀 6033

time limit: 1 sec memory limit: 128 mb

submit: 1098 solved: 205

description

小f終於買到了心儀的手機,當然是華為的**啦。小f有5個好朋友,她把新買的手機拿給朋友們看。手機就在她們手中傳遞了。小f先把手機給某個朋友,每個朋友欣賞完手機後就把手機傳給另外乙個人欣賞。當然已經看過手機的人還可以繼續接過來欣賞。結果經過n次傳遞後,手機又回到小f手中(中間過程手機也可能回到過小f手中)。你能知道傳遞的過程中有多少種傳遞方式嗎?

input

多組測試資料,每組輸入乙個整數n(1<=n<=20)

output

輸出傳遞的種數

sample input

2sample output

5

#include

using

namespace std;

long

long total;

int n;

voidff(

long

long sum,

int x,

int step)

if(x ==2)

if(x ==1)

}int

main

(void)ff

(1,1

,1);

printf

("%lld\n"

, total);}

return0;

}

因為資料較小,所以直接採用遞迴寫。

類似這種樹狀分類分情況的型別,直接對每種情況進行討論的遞迴,不考慮時間複雜度的話,應該是種通用解法,避免了推導通式的麻煩。(樹狀遞迴(感覺很形象))

針對這題,每次傳遞要考慮傳遞者(小f和朋友)和傳遞物件(小f和朋友),用x來分類。

再找遞迴出口,只有最後一次是傳給小f的才計入total中。

tip:step表示進行到第幾次傳遞;

sum表示這一趟的可能;

遞迴演算法常見用例

1.遞迴逆序列印字串 void reverse char s 2.遞迴方式將鍊錶逆序 p 為指向非空單鏈表中第乙個結點的指標,本演算法逆轉鍊錶並返回逆轉後的頭指標。基本思路是 如果鍊錶中只有乙個結點,則空操作,否則先逆轉a2開始的鍊錶,然後將 a1聯接到逆轉後的鍊錶的表尾 即a2 之後。linkli...

遞迴函式(詳例)

從函式棧的角度的運用 簡單的列印運用 includevoid function int n int main void function int n return 非空鍊錶的遞迴找最大值 lim findmax lim headptr 為了更好的理解遞迴的執行過程 在呼叫自生到最後時,if head...

遞迴演算法 以漢諾塔程式為例

遞迴是演算法中最基礎也是最重要的一部分。但每次我對遞迴的理解都不夠透徹,這次就以漢諾塔程式為例,加深自己對遞迴的理解。漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下...