回 帖 发 新 帖 刷新版面

主题:初学"递归"的请求,回贴即加分

谁能多举一些关于递归的例子?看到了一些资料说设计递归要设计:1递归公式  2递归边界,可是能否多举些例子说明呢?我觉得没有例子让人觉得似懂非懂,我的基础较差,大家不要见笑.

回复列表 (共11个回复)

11 楼

这么想吧
递归的程序在某一刻你可以看到有N个过程都在运行 并且是同一个过程 这就叫递归

如下

自然数的无序分拆
var a:array[1..100] of byte;
r,n:byte;
procedure print;
var j:byte;
begin
write('=');
for j:=1 to r-1 do
write(a[j],'+');
write(a[r]);
writeln;
end;
procedure sub(s,t:integer);
var i:byte;
begin
if t>=n then
begin
if t=n then
begin
r:=s-1;
print;
end;
end else
begin
for i:=1 to n do
begin
a[s]:=i;
t:=t+a[s];
sub(s+1,t);
t:=t-a[s];
{It's too important for this program}
{---------------}
if t=n-a[s] then
begin
a[s]:=0;{can be deleted}
break;
end;
{---------------}
a[s]:=0;{can be deleted}
end;
end;
end;
begin
readln(n);
sub(1,0);
readln;
end.

自然数的有序分拆
var a:array[0..100] of byte;
r,n:byte;
procedure print;
var j:byte;
begin
write('=');
for j:=1 to r-1 do
write(a[j],'+');
write(a[r]);
writeln;
end;
procedure sub(s,t:integer);
var i:byte;
begin
if t>=n then
begin
if t=n then
begin
r:=s-1;
print;
end;
end else
begin
for i:=a[s-1] to n do
begin
a[s]:=i;
t:=t+a[s];
sub(s+1,t);
t:=t-a[s];
{It's too important for this program}
{---------------}
if t=n-a[s] then
begin
a[s]:=0;{can be deleted}
break;
end;
{---------------}
a[s]:=0;{can be deleted}
end;
end;
end;
begin
a[0]:=1;
readln(n);
sub(1,0);
readln;
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册