遞迴的函式
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 或 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 output2 4
hint
source
think:
這裡用了3維陣列,來進行記憶化儲存,不然會超時;由於剛開始不理解三維陣列,特地搜了搜,像一維陣列類似於一行字,二維陣列類似於一頁紙字,而三維陣列就類似於一本書了,有好多頁,下面是摘抄的關於陣列的點:
1:一維陣列:
int a[5]; &a是陣列的位址,故&a + 1是加乙個陣列大小的長度。增加20個位元組。
*(&a) = a;對一維陣列的位址取值等於陣列首元素的位址。
2:二維陣列:
int a[2][2];((a + i)+ j);
((a+i)+j):第i+1個一維陣列的第j+1個元素的值。
3:三維陣列:
int a[2][2][2] ((*(a+i)+j)+k).
((*(a+i)+j)+k):第i+1個二維陣列的第j+1個一維陣列的第k+1個元素的值。
解釋完了陣列現在來說遞迴的呼叫:
當輸入2,2,2,的時候,首先是f(2,2,2)進行呼叫,當執行到x[2][2][2]的時候,看我的debug除錯出來的結果吧
函式遞迴之a b c
求a b c 的值,用乙個函式 fac n 求n a,b,c 的值由主函式輸入,最終得到的值在主函式中輸出。a,b,c的值 a b c 的值 階乘就是累乘,三個階乘相加,我們可以自定義求階乘的函式,加法在主函式中體現 先定義乙個整型函式 int fac int n 因為求的是乘法,所以變數定義為1 ...
Python之遞迴函式
如果乙個函式在函式內部呼叫函式本身,那麼這個函式就是遞迴函式。例如用遞迴函式計算階乘。deffact n if n 1 return 1.return n fact n 1 fact 1 1 fact 7 5040 fact 999 traceback most recent call last f...
JavaScript函式之遞迴
遞迴的本質就是使用函式自身來解決問題的思路。程式呼叫自身的程式設計技巧稱為遞迴 recursion 遞迴做為一種演算法在程式語言中廣泛應用。乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式...