今天練習3n+1Problem,讓我更深刻體會到程式設計不只是單純的計算,還需要考慮效率與輸出的正確性。題目要求計算從 i 到 j 的每個數字的「循環長度」,也就是經過 3n+1 的運算,直到回到 1 所需的步數,最後找出這個範圍中最大的循環長度。雖然規則簡單,但實際上要寫出一個正確且高效的程式,需要仔細思考每個步驟。
剛開始我先嘗試用最直接的暴力法,對區間內每個數字逐一計算,直到 1 才停止。雖然這樣也能得到正確答案,但當輸入範圍變大時,效能就會變差。後來我發現可以使用字典來記錄已經計算過的數字與對應的循環長度,下次遇到相同數字時就不需要重新計算,直接取出結果,這樣大大提升了程式的速度。這也是我第一次體會到「記憶化」在演算法優化上的使用方式。
除此之外,這題也讓我注意到程式的細節,例如i和j不一定有大小順序,因此必須先用 min 和 max 來確保能正確跑完區間。輸出的格式也必須完全符合題目要求,包含了空格跟輸出的順序,否則就會被判定為錯誤。
總結來說,這題雖然演算法沒那麼複雜,卻是訓練程式思維的好題目。我學會了拆解問題、處理邊界條件、以及如何讓程式更有效率。