39階梯走法

westwolf發表於2021-09-09

小明剛剛看完電影《第39級臺階》。離開電影院的時候,他數了數禮堂前的臺階數,恰好是39級!
站在臺階前,他突然又想著一個問題:
如果我每一步只能邁上1個或2個臺階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級臺階,有多少種不同的上法呢?
請你利用計算機的優勢,幫助小明尋找答案。

解析:首先,分析題目要求,每一步只能邁1/2個臺階;最後一步必須是右腳(即步數為偶數);

假設最後一步恰好到達39級臺階,則前一步所處的位置是38/37級臺階,此時的步數為奇數。

根據要求寫出初步的框架,

由此得出,  n級臺階    f(n)    剩餘臺階數     所走步數

          當n==1時,   f(n-1)      1         step%2==1

          當n==2時,   f(n-2)      1         step%2==1  

然後,正向推導,

      當n==1級  走法有0種

      當n==2級  走法有1種(1+1)

      當n==3級  走法有2種(1+2/2+1)

      當n==4級  走法有2種(1+1+1+1/2+2)

       ......

      當n==37級  走法有f(n-2)+1種      剩餘2級臺階 return step%2;//只保留奇數步的結果,保證最後一步是右腳

      當n==38級  走法有f(n-1)+1種      剩餘1級臺階 return 1;

主碼:
public class test {

// 奇數步
static long g(int n)
{
    if(n==0) return 0;
    if(n==1) return 1;
    //if(n==2) return 1;

    return f(n-1) + f(n-2);
}

// 偶數步
static long f(int n)
{
    if(n==0) return 1;
    if(n==1) return 0;
    //if(n==2) return 1;

    return g(n-1) + g(n-2);
}

public static void main(String[] args) {
    System.out.println(f(5));
    System.out.println(f(39));
}

}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4662/viewspace-2801384/,如需轉載,請註明出處,否則將追究法律責任。

相關文章