遞迴的函式

2021-07-25 00:04:38 字數 1055 閱讀 9898

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 1

2 2 2

example output

2

4

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...