Rabbits and Recurrence Relations
Problem
A?sequence?is an ordered collection of objects (usually numbers), which are allowed to repeat. Sequences can be finite or infinite. Two examples are the finite sequence?(π,?2√,0,π)?and the infinite sequence of odd numbers?(1,3,5,7,9,…). We use the notation?an?to represent the?n-th term of a sequence.
A?recurrence relation?is a way of defining the terms of a sequence with respect to the values of previous terms. In the case of Fibonacci's rabbits from the introduction, any given month will contain the rabbits that were alive the previous month, plus any new offspring. A key observation is that the number of offspring in any month is equal to the number of rabbits that were alive two months prior. As a result, if?Fn?represents the number of rabbit pairs alive after the?n-th month, then we obtain the?Fibonacci sequence?having terms?Fn?that are defined by the recurrence relation?Fn=Fn?1+Fn?2?(with?F1=F2=1?to initiate the sequence). Although the sequence bears Fibonacci's name, it was known to Indian mathematicians over two millennia ago.
When finding the?n-th term of a sequence defined by a recurrence relation, we can simply use the recurrence relation to generate terms for progressively larger values of?n. This problem introduces us to the computational technique of?dynamic programming, which successively builds up solutions by using the answers to smaller cases.
Given:?Positive integers?n≤40?and?k≤5.
Return:?The total number of rabbit pairs that will be present after?n?months if we begin with 1 pair and in each generation, every pair of reproduction-age rabbits produces a litter of?k?rabbit pairs (instead of only 1 pair).
斐波那契數(shù)列的一點(diǎn)改變,生育年齡的兔子每次生育不止一個兔子。所以公式修改為Fn=Fn?1+K*Fn?2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
使用dp,就是不要按照題面意思用遞歸了,算過的就不算了,這樣時間復(fù)雜度大大下降O(n)
本來想用dict,實(shí)現(xiàn)一個map,然后判斷序列每個數(shù)字是否算過了,最后還是建了兩個list
搞不懂 input 的值為什么都視為 str ,python 3里 input 和raw_input 是一樣的,沒有raw_input ?了。但是必須把變量轉(zhuǎn)換成int 才能算,不知道為什么。
還有就是對于list 未定義的區(qū)域,一定要先初始化值,不然直接使用會冒出奇怪的數(shù)字。 先 append(0)
n=input("n is:\n") k=input("k is:\n") #dynamic programming f_seq=[1,1]; bool_list=[1,1,0]; for i in range(2,int(n)):if(bool_list[i]==0):f_seq.append(f_seq[i-1]+int(k)*f_seq[i-2])bool_list[i]=1bool_list.append(0)i+=1;else:bool_list.append(0)i+=1; print(f_seq[int(n)-1]);總結(jié)
以上是生活随笔為你收集整理的Rabbits and Recurrence Relations的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几行 Java 代码搞定图片提取文字功能
- 下一篇: 计算机的数学知识的手抄报图片大全,数学知