首先来参考一下oracle 11.2的新特性,递归查询
http://www.oracle.com/technetwork/cn/articles/hartley-recursive-086819-zhs.html
小试一下使用with递归来解决问题
题目是
啤酒 2元1瓶
4个瓶盖换1瓶
2个空瓶换1瓶
10元可以喝几瓶
--------------------------------------------------------------------------------------------------
/*
啤酒 2元1瓶
4个瓶盖换1瓶
2个空瓶换1瓶
10元可以喝几瓶
*/
with r(btl,lid,lqr) as
(select 10 / 2 btl, 10 / 2 lid, 10 / 2 lqr from dual
-- 初始10元,5个瓶子,5个盖子,5瓶酒
union all
-- 递归
select mod(btl, 2) + trunc(btl / 2) + trunc(lid / 4) btl, -- 取模得到剩余瓶子或瓶盖
mod(lid, 4) + trunc(btl / 2) + trunc(lid / 4) lid,
-- 换酒规则,每多一瓶酒,就多一个瓶子和一个瓶盖,多一瓶酒
lqr + trunc(btl / 2) + trunc(lid / 4) lqr
from r
where trunc(btl / 2) != 0 or trunc(lid / 4) != 0 -- 终止条件
) select btl "剩余瓶子", lid "剩余瓶盖", lqr "喝了的酒(瓶)" from r;
|
|
剩余瓶子
|
剩余瓶盖
|
喝了的酒(瓶)
|
|
5
|
5
|
5
|
|
4
|
4
|
8
|
|
3
|
3
|
11
|
|
2
|
4
|
12
|
|
2
|
2
|
14
|
|
1
|
3
|
15
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29619999/viewspace-2120253/
,如需转载,请注明出处,否则将追究法律责任。