用Free pascal语言。看下面。
某人上台阶,一步可以走一个台阶,也可以走两个台阶,还可以走三个台阶。问他走到10层台阶,共有多少种不同的走法。要程序。...
某人上台阶,一步可以走一个台阶,也可以走两个台阶,还可以走三个台阶。问他走到10层台阶,共有多少种不同的走法。
要程序。 展开
要程序。 展开
5个回答
展开全部
递归吧,扩展到n的情况(n当然不能很大).
function count( n:integer): integer;
begin
if n = 3 then
count:= 4
else if n = 2 then
count:= 2
else if n <= 1 then
count:=1
else count := count(n-1) + count(n-2) + count(n-3);
end;
走1级1种方法
走2级2种方法
走3级有(走3级+走2级+走1级)种方法
走n>3级有f(n)种走法.
分:
最后一步走1级则前面有f(n-1)种走法.
最后一步走2级则前面有f(n-2)种走法.
最后一步走3级则前面有f(n-3)种走法.
f(n) = f(n-1)+f(n-2)+f(n-3) (n>3)
function count( n:integer): integer;
begin
if n = 3 then
count:= 4
else if n = 2 then
count:= 2
else if n <= 1 then
count:=1
else count := count(n-1) + count(n-2) + count(n-3);
end;
走1级1种方法
走2级2种方法
走3级有(走3级+走2级+走1级)种方法
走n>3级有f(n)种走法.
分:
最后一步走1级则前面有f(n-1)种走法.
最后一步走2级则前面有f(n-2)种走法.
最后一步走3级则前面有f(n-3)种走法.
f(n) = f(n-1)+f(n-2)+f(n-3) (n>3)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这道题我刚做的,不是很简单吗,干嘛要用什么递归、递推啊,直接用3个for循环就能做出来了:
var i,j,k:integer;
begin
for i:=1 to 10 do
for j:=1 to 5 do
for k:=1 to 3 do
if i+j*2+k*3=10 then
writeln(i,j,k);
readln;
end.
var i,j,k:integer;
begin
for i:=1 to 10 do
for j:=1 to 5 do
for k:=1 to 3 do
if i+j*2+k*3=10 then
writeln(i,j,k);
readln;
end.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单的递归题啊!
var n1:longint;
a:array[0..1000]of longint;
function f(n:longint):longint;
begin
if a[n]=0 then begin
if (n=0)or(n=1) then a[n]:=1
else a[n]:=(f(n-1)+f(n-2))mod 10000;
end;
f:=a[n];
end;
begin
n1:=10;
fillchar(a,sizeof(a),0);
writeln(f(n1));
end.
对于这道题来说是递推也是递归
但是请问他上100层楼梯呢?
你认为我俩的程序谁快些?
而且你的程序运行结果还是错的
走1级1种方法
走2级2种方法
走3级有(走2级+走1级)种方法
走4级有(走3级+走2级)种方法
……
自己推吧,你会发现你答案错误
var n1:longint;
a:array[0..1000]of longint;
function f(n:longint):longint;
begin
if a[n]=0 then begin
if (n=0)or(n=1) then a[n]:=1
else a[n]:=(f(n-1)+f(n-2))mod 10000;
end;
f:=a[n];
end;
begin
n1:=10;
fillchar(a,sizeof(a),0);
writeln(f(n1));
end.
对于这道题来说是递推也是递归
但是请问他上100层楼梯呢?
你认为我俩的程序谁快些?
而且你的程序运行结果还是错的
走1级1种方法
走2级2种方法
走3级有(走2级+走1级)种方法
走4级有(走3级+走2级)种方法
……
自己推吧,你会发现你答案错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
递推,不是递归.
a:=0;b:=1;c:=2;d:=4;
for i:=4 to 10 do
begin
a:=b;b:=c;c:=d;d:=a+b+c;
end;
writeln(d);
算法由来:
到第i个台阶的种数=到第i-1个台阶+到第i-2个台阶+到第i-3个台阶数
a:=0;b:=1;c:=2;d:=4;
for i:=4 to 10 do
begin
a:=b;b:=c;c:=d;d:=a+b+c;
end;
writeln(d);
算法由来:
到第i个台阶的种数=到第i-1个台阶+到第i-2个台阶+到第i-3个台阶数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是要答案还是要程序?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询