请问关于递归算法?(50分)

  • 主题发起人 主题发起人 zizi0
  • 开始时间 开始时间
Z

zizi0

Unregistered / Unconfirmed
GUEST, unregistred user!
有A表(编号,名称,单价,比例) B表(名称,单价)
A表有如下记录
编号 名称 单价 比例
PL001 ABS1 0 50
PL001 ABS2 0 50
PL002 PL001 0 20
PL002 ABS3 0 80
ABS3 PL001 0 50
ABS3 ABS5 0 50
B表有如下记录
名称 单价
ABS1 10
ABS2 20
ABS4 30
ABS5 40
现要求如下:根据B表提供的单价,计算出A表的各项单价。比如PL002的PL001的单价=PL001的ABS1*50/100+ PL001的ABS2*50/100=15
PS:一个物品可能由几个名称组成,但是比例加起来为100
请问用递归如何处理这个问题?
 
涵数套函数
 
问题是记录有十万条左右,根本不知可能最多的层数是多少?如何套下去呢?
 
递归就是要有终止条件。没有也叫递归吗?
 
所以我正茫然中。。。。。。希望高手指点一二,看如何解决这个问题。。。。。
 
递归的结束条件就是比例合不为100,或者B表里没有构成这个物品的子物品,并且从A表里也不能构成。
if exists (select * from sysobjects where id = object_id(N'[dbo].[A]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[A]
GO
if exists (select * from sysobjects where id = object_id(N'[dbo].') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].
GO
CREATE TABLE [dbo].[A] (
[ID] [varchar] (50) NOT NULL ,
[Name] [varchar] (50) NOT NULL ,
[Price] [money] NULL ,
[Ratio] [real] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo]. (
[Name] [varchar] (50) NOT NULL ,
[Price] [money] NULL
) ON [PRIMARY]
GO
Insert Into A(ID, Name, Price, Ratio)
values('PL001', 'ABS1', 0, 50)
Insert Into A(ID, Name, Price, Ratio)
values('PL001', 'ABS2', 0, 50)
Insert Into A(ID, Name, Price, Ratio)
values('PL002', 'PL001', 0, 20)
Insert Into A(ID, Name, Price, Ratio)
values('PL002', 'ABS3', 0, 80)
Insert Into A(ID, Name, Price, Ratio)
values('ABS3', 'PL001', 0, 50)
Insert Into A(ID, Name, Price, Ratio)
values('ABS3', 'ABS5', 0, 50)
Insert Into B(Name, Price)
values('ABS1', 10)
Insert Into B(Name, Price)
values('ABS2', 20)
Insert Into B(Name, Price)
values('ABS4', 30)
Insert Into B(Name, Price)
values('ABS5', 40)
Select ID, Sum(B.Price * A.Ratio / 100), Sum(A.Ratio)
From A Inner Join B On A.Name = B.Name
Group By ID
Having Sum(A.Ratio) = 100
动动脑,这个问题不是太难
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1416761
 
TO:caidao兄
递归的结束条件就是比例合不为100,或者B表里没有构成这个物品的子物品,并且从A表里也不能构成。 还是没太想清楚,能不能具体给个写法?
 
没人吗?
 
高手呀。。。出来吧。
 
如果无解,那我要如何重新设计这个数据库呢?
 
再套一层
 
如何套?根本就不知有多少层呀!!
 
此问题已解决,
谢谢大家
 
接受答案了.
 
后退
顶部