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

2021-07-29 17:56:44 字數 1113 閱讀 5403

題目簡要:

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[

21][

21][

21];

intanswer

(int a,

int b,

int c)

else

if(aelse

}int

main

()return0;

} 解題感受:

通過這道題,我掌握了一種如何減少運算量的方法,通過將已知量放入陣列,可以避免很多重複計算,從而避免超時問題。要說到感受,就是自己還是應該開啟思路。

遞推遞迴練習 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 其它情況返回 f a...

遞推遞迴 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 其它情況返回 ...