problem 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
對於每組測試資料,輸出函式的計算結果。
example input
1 1 12 2 2
example output
24
hint
遞迴是乙個非常耗時的操作,遞迴思想簡單,其實是將繁重的任務交給計算機來完成。計算機來記住某個時候的狀態,轉身去處理新的問題,也就是利用堆疊的原理。頻繁的壓棧和出棧將耗費大量的計算機資源。例如著名的漢諾塔。在某些遞迴模型中例如1579,遞迴過程中可能蘊含之前已經解決過的問題,所以我們完全可以沒處理乙個新的小問題時,就把這個小問題的結果儲存下來。以備後用。這就是記憶化遞迴!非常節省效率!
-------**
#include#includeint f[40][40][40];
int ji(int a,int b,int c)
{ if(a<=0||b<=0||c<=0)
return 1;
if(f[a][b][c]>0)
return f[a][b][c];
else if(a>20||b>20||c>20)
return f[a][b][c]=ji(20,20,20);
else if(a
遞迴之遞迴的函式
遞迴的函式 time limit 1000 ms memory limit 65536 kib submit statistic discuss problem description 給定乙個函式 f a,b,c 如果 a 0 或 b 0 或 c 0 返回值為 1 如果 a 20 或 b 20 或...
遞迴的函式
time limit 1000ms memory limit 65536kb submit statistic discuss problem description 給定乙個函式 f a,b,c 如果 a 0 或 b 0 或 c 0 返回值為 1 如果 a 20 或 b 20 或 c 20 返回值...
遞迴的函式
time limit 1000ms memory limit 65536kb submit statistic problem description 給定乙個函式 f a,b,c 如果 a 0 或 b 0 或 c 0 返回值為 1 如果 a 20 或 b 20 或 c 20 返回值為 f 20,2...