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