生活随笔
收集整理的這篇文章主要介紹了
                                
跳格子的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            常見的一個經典問題:
 
從格子外面朝著格子里面跳,請問假定如果每次只能跳一個格子或者兩個格子,跳到第八個格子有多少種不同的跳法?
 
 
數學的想法
 
這是一個關于數列的題,可以這樣去想一個存在遞歸的問題:
 假如我要跳到第 nnn 個格子,那么就必須要在前一步跳到第 n?1n-1n?1 或者 n?2n-2n?2 個格子,如果說跳到第 nnn 個格子用的次數為 ana_nan? ,那么 an=an?1+an?2a_n = a_{n-1}+ a_{n-2}an?=an?1?+an?2?。
 注意,在這個地方有一個理解問題,為什么在等式的右側沒有系數:盡管 n?2n-2n?2 能夠通過移動一個格子移動到 n?1n-1n?1 的位置,但是這樣會導致計算的重復性,因此前面不加系數,直接可以默認為從 n?2n-2n?2 個格子是跳一次移動兩個格子到 nnn 的這個位置。
 那么,根據這樣的想法,去求解這個數學問題就很簡答了,就直接是斐波那契數列了:對于前面的跳格子的跳法進行計算,后面的就可以根據前面兩項進行求和計算。
 
格子數12345678910
| 跳法 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 | 89 | 
當然,如果是步長設置最長為3,那么就相當于這個項的前面三項的值進行求和即可
 
格子數12345678910
| 跳法 | 1 | 2 | 4 | 7 | 13 | 24 | 44 | 81 | 149 | 274 | 
以此類推,后面的格子可以根據前面的格子跳法來求和進行計算。
 
代碼
 
運用代碼來寫遞歸的方式同樣可以計算
 python代碼如下 代碼片:
 
def get_num(i
):k 
= input('請輸入{}(若希望終止請輸入 \'False\') :'.format(i
))k 
= k
.upper
()if k 
== 'FALSE':return Falsetry:k
=float(k
)except ValueError 
as reason
:print('輸入有誤,請輸入整數值:')return get_num
()if k
==int(k
):k
=int(k
)return k
else:print('輸入有誤,您輸入的數值為浮點數,請輸入整數值')return get_num
()def get_point():point 
= {}point_name 
= ['終點','最大步長']for i 
in point_name
:point
[i
] = get_num
(i
)if point
[i
] is False:return Falsereturn point    
def num_count(begin_point
,end_point
,max_step
):if begin_point
>end_point
:return 0if begin_point
==end_point
:return 1else:return sum([num_count
(begin_point
+1+i
,end_point
,max_step
) for i 
in range(max_step
)])if __name__
=='__main__':point 
= get_point
()if point 
is False:print('輸入的內容有誤,程序已經終止')else:end_point 
= point
['終點']max_depth 
= point
['最大步長']begin_point 
= 0num 
= num_count
(begin_point
,end_point
,max_depth
)a 
='='*50print('\n',a
,end
='\n\n')print('起始點為:{}\n終點為:{}\n最大步長為:{}'.format(begin_point
,end_point
,max_depth
))print('所走的總的不同選擇有 {} 種'.format(num
))
                            總結
                            
                                以上是生活随笔為你收集整理的跳格子的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。