SQL每日一題,等比數(shù)列問題
2023-02-28 22:01 作者:SQL數(shù)據(jù)庫開發(fā) | 我要投稿

等比數(shù)列問題
問題描述
一家公司第一天給你1分錢,第二天給你2分錢,第三天給你4分錢,依次類推到第30天一共給你多少錢?
問題分析
這是一個典型的等比數(shù)列的問題,我們可以借助等比數(shù)列的公式使用WHILE循環(huán),還有CTE遞歸方法來求解
WHILE求解
--定義變量 DECLARE?@i?DECIMAL?(18,?2) =?0.01,?--初始為第1天0.01元 @total?DECIMAL?(18,?2) =?0, @m?INT?=?2,?--@m為每天翻多少倍 @n?INT?=?2,?--@n為第幾天,因為是第2天才開始翻倍,所以初始設為2 @Max?INT?=?30?--@Max為截止翻倍的那天 WHILE?@n <= @Max BEGIN SELECT?@i = @i * @m?--計算當天多少錢 SELECT?@total = @total + @i?--計算截至當天總共多少錢 SELECT?@n = @n +?1?--循環(huán)變量累加1天 END --輸出信息 SELECT?@total
CTE遞歸求解
WITH CTE (n, i, total) AS ( SELECT?1 ,CAST?(0.01?AS?DECIMAL(18,?2))?--第1天只有0.01元 ,CAST?(0.01?AS?DECIMAL(18,?2))?--第1天當天總共0.01元 UNION?ALL SELECT?n +?1?--n加1天 ,CAST?(i *?2?AS?DECIMAL(18,?2))?--第n + 1天有多少錢 ,CAST?(total + i *?2?AS?DECIMAL?(18,?2)) --第n + 1天當天總共多少錢 FROM?CTE WHERE?n <?30?--結束遞歸 ) SELECT?*?FROM?CTE
標簽: