将n分解为正整数的和(pascal语言)

来源:百度知道 编辑:UC知道 时间:2024/05/30 18:27:46
用递归解决这个问题。
如把4分解为:
4=1+1+1+1;
4=1+2+1;
4=2+2;
4=3+1;
参考tanyuguo的意见,用回溯也行

PROGRAM aa;
VAR
i,j:integer;
a:array[1..100] of integer;
PROCEDURE fun(k,t:integer);
var
i,j:integer
begin
if t=n then for i:=1 to i-1 do write(a[i])
else begin
if t>n then exit
else begin
for i:=1 to a[i-1] do
fun(k+1,t+i);
end;
end;
BEGIN
read(n);
fun(1,0);
END.
这个程序我没调试(机子里没有pascal,不过思路已经出来了!)只是有一点小错误了:》实在不好意思

这题我感觉递归不如回溯。

用一个函数代表:fun(total,max:integer):integer;
意思为用若干个不大于max的整数组成total的方法