切换到宽版
  • 6312阅读
  • 1回复

『讨论』请教一道简单题 [复制链接]

上一主题 下一主题
离线kongyo
 
只看楼主 倒序阅读 0 发表于: 2005-12-14
设有一个共有n级的楼梯,某人每步可走1级,也可走2级,也可走3级,用递推公式给出某人从底层开始走完全部楼梯的走法。并编程实现.例如:当n=3时,共有4种走法,即1+1+1,1+2,2+1,3。
离线archimedes

只看该作者 1 发表于: 2005-12-14
哦!
递归程序
program Stair;
var
x:integer;
function Calc(x:integer):integer;
begin
case x of
  1:begin Calc:=1; exit end;
  2:begin Calc:=2; exit end;
  3:begin Calc:=4; exit end;
  else Calc:=Calc(x-1)+Calc(x-2)+Calc(x-3);
end
end;
begin
readln(x);
writeln(Calc(x);
end.
当然,此算法极有可能超时,所以可用递推法(类似于动态规划)
program Stair;
var
x,i:integer;
a:array[1..1000]of integer;
begin
readln(x);
a[1]:=1; a[2]:=2; a[3]:=4;
if x<4 then begin writeln(a[x]); halt end;
for i:=4 to x do
  a:=a[i-1]+a[i-2]+a[i-3];
writeln(a[x])
end.
这样就不会超时了!
快速回复
限100 字节
 
上一个 下一个