小問題,對遞迴重複呼叫的改進,一起來分享

2021-05-07 12:22:11 字數 1114 閱讀 6519

problem

設有一頭小母牛,從出生第四年起每年生一頭小母牛,按此規律,第n年時有幾頭母牛?

input

本題有多組資料。每組資料只有乙個整數n,獨佔一行。(1≤n≤50)

output

對每組資料,輸出乙個整數(獨佔一行)表示第n年時母牛的數量

sample input14

520sample output12

3872

------------------------------------

最容易寫出來的

解決方法很簡單:母牛數等於自己加上它生的小牛數,再加上它的小牛們自己生的小牛,如此遞迴。

/*此解答未被accept

原因:運算時間超時(1200ms,而時間限制在1000ms)

*/#include

int f(int n)

}return res;

}int main()

return 0;

}上面解答的弱點是,重複計算(比如f(1)被。每乙個小牛掉用了,被每乙個小牛的每乙個孩子呼叫了,如此重複下去),導致時間開銷很大。

----------------------------

改進的:

為了避免重複運算,我們將用乙個陣列儲存已經被計算過的值,由於函式f的任何計算的結果都不會是

-1,那麼我們設定陣列的初始值為-1,但檢查到其值不為-1時,那麼它已經被計算過了,我們就沒有必要再計算了。

/*此解答已通過tongji編譯,並接收

user        result   memory time  language date 

zhouyinhui  accepted 56 k   2ms   c++      2006-05-06 16:32:02

*/#include

#include

int* arr;//用於儲存運算結果,避免遞迴呼叫中的重複運算

int f(int n)

res += *(arr+i);   }}

return res;

}int main()

return 0;

}

jquery click重複呼叫的問題

原呼叫時動態繫結了click事件,但是呼叫的時候發現總是重複呼叫幾次。function openaddidx st,et 問題現象 每次呼叫openaddidx,開啟對話方塊,顯示正常,當單擊按鈕 btn addidxcon 重複呼叫n次addidxandredrowline,並且n不固定,有時候1...

使用物件封裝ajax重複呼叫的方法

在專案中經常用到ajax呼叫遠端資料,每一次呼叫,都得寫乙個ajax方法,這就造成了重複 過多,可讀性也不夠強,所以,我一般都是封裝起來,需要的時候呼叫。var imgupload success function data 呼叫 imgupload.method url get function ...

遞迴等小問題的總結

遞迴時注意一下兩個主要的問題 1 逐漸縮小問題的規模,並且可以使用相同的方法來解決子問題 2 遞迴一定要找到最後的結束條件,否則將陷入死迴圈。遞迴主要是 遞迴過程和最終結束條件 關於遞迴過程則要找到 大問題與子問題的共同點,3生2,2生1,1為終結 在遇到不能簡單呼叫本身的遞迴函式時,這時要使用一定...