Partition(M, N)
1. if M < 1 or N < 1
2. then Error("输入参数错误")
3. else if M = 1 or N = 1
4. then return 1
5. else if M < N
6. then return Partition(M, M)
7. else if M = N
8. then return (1 + Partition(M, M-1))
9. else
10. return (Partition(M, N-1) + Partition(M-N, N));
一个memo,一个按钮,一个文本框(用来输入需要分解的值)
我这样做可以实现:但有几个问题:
function GetNum(S:string;Num:integer):string;
var I,J:integer;
Begin
for I:=1 to (Num div 2) do
begin
if (I>1 )and (Num<strtoint(edit1.Text)) then
break;//这一句写得不好
S:=S+'+'+IntToStr(I);
Mids:=S;
S:=S+'+'+IntToStr(Num-I);
memo1.Lines.Add(s);
if( I<>Num-I)and (num-I<>2) then
GetNum(Mids,Num-I);
S:=''//从新开始
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var mids,s:string;
begin
s:='';
memo1.Lines.Clear;
GetNum(S,strtoint(edit1.Text));
end;
我是这样想的:
如要分解的值是6则
有1+5
用mids保存1
再对5分解
1+4
这时mids保存1+1
接着对4进行分解.
。。。。