題目連結:
定義一函數 F(x) 為
1 ,如果 x = 1
F(x - 1) + F(x + 1) ,如果 x 為奇數
F(x ÷ 2) ,如果 x 為偶數
給定正整數 x (1 ≦ x ≦ 2000000),求 F(x) 之值。
雖然本題正如其名,可以直接用遞迴的方式取出(因為每組測試資料只有一筆測資)。
但是也可以直接從第一項、第二項求到第 x 項,不過求解過程需要一些技巧。因為當 x 為奇數時,需要前一項以及後一項的值,因此我們跳過此項先求後一項再回來。
而 x + 1 此時必為偶數,當代入的值為偶數時,此時函數值等於 (x + 1) ÷ 2 的值。因為我們是由小到大求函式值,因此(x + 1) ÷ 2 的函數值已知。
回到 x (奇數),因為前一項、後一項已知,此時即可得出函數值。
不過用此作法建表的話反而比遞迴慢,因為測試資料的數量只有一筆,因此建表反而會比原本的遞迴求解來得慢。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。