開啟章節選單
10696 f91
題目連結
題目翻譯
McCarthy 是電腦科學界知名的理論學家,他定義了一個遞迴函式 f91,輸入一個正整數 N,回傳一個正整數,定義如下:
- 若 N ≤ 100,則 f91(N) = f91(f91(N+11))
- 若 N ≥ 101,則 f91(N) = N - 10
請寫一個程式計算 McCarthy's f91。
輸入
輸入為一連串正整數,每個數最多 1,000,000,最多 250,000 筆測資,每個數字獨自一行。輸入以 0 結束,0 本身不需處理。
輸出
對每筆輸入依照範例格式輸出一行結果,格式為 f91(N) = 結果。
解題思路
直接照定義遞迴會因為測資量大(最多 25 萬筆)而效能不足,但這個函式其實有封閉解:
- 當 N ≤ 100 時,不論遞迴多少層,最後都會收斂到 91;
- 當 N ≥ 101 時,直接等於 N - 10。
因此只要用一個 O(1) 的條件判斷即可,不需要真的做遞迴呼叫。
程式碼
#Jackis666 while True: n=int(input()) if n==0: break print("f91(",end="") print(n,end="") print(") = ",end="") if n<=100: print(91) else: print(n-10)