切換
舊版
前往
大廳
主題

ZeroJudge - e357: 遞迴函數練習 解題心得

Not In My Back Yard | 2019-08-18 21:08:52 | 巴幣 4 | 人氣 461

題目連結:


題目大意:
定義一函數 F(x)  為
1           ,如果 x = 1
F(x - 1) + F(x + 1)   ,如果 x 為奇數
F(x ÷ 2)        ,如果 x 為偶數

給定正整數 x (1 ≦ x ≦ 2000000),求 F(x) 之值。



範例輸入:
6


範例輸出:
2


解題思維:
雖然本題正如其名,可以直接用遞迴的方式取出(因為每組測試資料只有一筆測資)。

但是也可以直接從第一項、第二項求到第 x 項,不過求解過程需要一些技巧。因為當 x 為奇數時,需要前一項以及後一項的值,因此我們跳過此項先求後一項再回來。

而 x + 1 此時必為偶數,當代入的值為偶數時,此時函數值等於 (x + 1) ÷ 2 的值。因為我們是由小到大求函式值,因此(x + 1) ÷ 2 的函數值已知。

回到 x (奇數),因為前一項、後一項已知,此時即可得出函數值。

不過用此作法建表的話反而比遞迴慢,因為測試資料的數量只有一筆,因此建表反而會比原本的遞迴求解來得慢。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作