遞推遞迴 C 遞迴的函式

2021-07-30 07:30:14 字數 1001 閱讀 6132

題目:

description

給定乙個函式 f(a, b, c):

如果 a ≤ 0 或 b ≤ 0 或 c ≤ 0 返回值為 1;

如果 a > 20 或 b > 20 或 c > 20 返回值為 f(20, 20, 20);

如果 a < b 並且 b < c 返回 f(a, b, c−1) + f(a, b−1, c−1) − f(a, b−1, c);

其它情況返回 f(a−1, b, c) + f(a−1, b−1, c) + f(a−1, b, c−1) − f(a-1, b-1, c-1)。

看起來簡單的乙個函式?你能做對嗎?

input

輸入包含多組測試資料,對於每組測試資料:

輸入只有一行為 3 個整數a, b, c(a, b, c < 30)。

output

對於每組測試資料,輸出函式的計算結果。

sample input

1 1 1

2 2 2

sample output

2

4

解題思路:第一感覺是很簡單,很基礎的遞迴問題,但是寫完以後發現超時了,試了好幾次都不行,無奈之下上網搜尋了一下原來是單純的遞迴重複計算太多導致超時,用乙個三維陣列儲存每次計算的結果,再遇到時直接返回值就可以了,這樣可以節省好多時間。個人感覺這種思路真的很不錯,讓我對遞迴也有了乙個新的認識。

**:#include

using namespace std;

int d[50][50][50];

int f(int a,int b,int c)

else if(a>a>>b>>c)

{cout<

回顧:當時做的時候超時了以為的自己的**錯了,一直在找邏輯問題,到最後沒辦法了去網上一搜才知道問題所在,個人感覺遇到自己接觸少的知識點,不熟練的情況下找問題不要侷限在邏輯問題,自己過一遍確定沒錯後如果還是超時可能就是遇到了盲點,自己看看資料比較好。

遞推遞迴練習 C 遞迴的函式

給定乙個函式 f a,b,c 如果 a 0 或 b 0 或 c 0 返回值為 1 如果 a 20 或 b 20 或 c 20 返回值為 f 20,20,20 如果 a b 並且 b c 返回 f a,b,c 1 f a,b 1,c 1 f a,b 1,c 其它情況返回 f a 1,b,c f a 1...

遞推遞迴練習C 遞迴的函式

題目簡要 description 給定乙個函式 f a,b,c 如果 a 0 或 b 0 或 c 0 返回值為 1 如果 a 20 或 b 20 或 c 20 返回值為 f 20,20,20 如果 a b 並且 b c 返回 f a,b,c 1 f a,b 1,c 1 f a,b 1,c 其它情況返...

遞迴遞推練習 C 遞迴的函式

description 給定乙個函式 f a,b,c 如果 a 0 或 b 0 或 c 0 返回值為 1 如果 a 20 或 b 20 或 c 20 返回值為 f 20,20,20 如果 a b 並且 b c 返回 f a,b,c 1 f a,b 1,c 1 f a,b 1,c 其它情況返回 f a...