一个超级难的free pascal循环问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 21:45:25
题目是:某人上台阶,一步可以走一个台阶,也可以走两个台阶,还可以走三个台阶。问他走到10层台阶时共有多少种不同走法?

用F[I]表示上到第I级台阶时的方法数
因为F[I]只能由F[I-1],F[I-2],F[I-3]三种状态到达,所以递推式
F[I]=F[I-1]+F[I-2]+F[I-3]

Var F:Array[0..10]of Longint;
I:Longint;
Begin
F[0]:=1;
F[1]:=1;
F[2]:=2;
For I:=3 to 10 do
F[I]:=F[I-1]+F[I-2]+F[I-3];
Writeln(F[10]);
End;

本题递推
var f:array[-2..10] of longint;
i:longint;
begin
f[0]:=1;
for i:=1 to 10 do
f[i]:=f[i-1]+f[i-2]+f[i-3];
writeln(f[10]);
end.
从1层顺推到10层,每层满足方案数为i-1层、i-2层、i-3层方案数和。
f[0]:=1;为初始化
答案为274吧

答案为斐波那契数列

楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,还可以走三个台阶。编一程序计算共有多少种不同的走法.

设n阶台阶的走法数为f(n)

显然有

1 n=1

f(n)={ 2 n=2

3 n=3

f(n-1)+f(n-2)+f(n-3) n>3

可编程序如下:

program louti;

var n:integer;

function f(x:integer):integer;

begin
if x