PASCAL问题!急!请诸位大虾帮帮忙吧!!!

来源:百度知道 编辑:UC知道 时间:2024/06/02 01:14:16
这题要用递归做,可有些难。
题目是:
有一个N阶台阶的楼梯(0<N>10),可以一次走一步,也可以一次走两步,用户输入N,输出所有走台阶的方案。
例如:N=3
输出:111
12
21
我有急用!写出答案的同时,最好把为什么这样做也写上,谢谢诸位了!!!!!
这题要用递归做,可有些难。
题目是:
有一个N阶台阶的楼梯(0<N>10),可以一次走一步,也可以一次走两步,用户输入N,输出所有走台阶的方案。
例如:N=3
输出:
111
12
21
我有急用!写出答案的同时,最好把为什么这样做也写上,谢谢诸位了!!!!!

var
n : integer;
a : array[0..20] of integer;

procedure cal(dep:integer;now:integer);
var i : integer;
begin

if now=n then // 走完时
begin
for i:=1 to dep-1 do
write(a[i]);
writeln;
exit;
end;

a[dep] := 1; // 走一步
cal(dep + 1, now + 1);

if now <= (n - 2) then
begin
a[dep] := 2; // 走两步
cal(dep + 1, now + 2);
end;

end;

begin
write('enter n : ');
readln(n);
cal(1, 0);
end.

pascal 3年没用了......