桐桐的计算 这个周末数学老师布置了一道有趣的题目pascal
展开全部
{题目是这样吧:
桐桐经常找一些很有趣的数学书来阅读以增长自己的数学知识。
一天,他偶然发现一个递归函数w(a,b,c)有以下性质:
如果a<=0 or b<=0 or c<=0就返回值1;
如果a>20 or b>20 or c>20就返回w(20,20,20);
如果a<b并且b<c就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
其它情况就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)。
桐桐想通过编程求出这个简单的递归函数的值,可是他在编程的时候遇到了一些困难。你能帮助他吗?
如果是的话,那程序如下:}
var
a,b,c:longint;
f:array[-50..50,-50..50,-50..50]of longint;
function w(a,b,c:longint):longint;
begin
if f[a,b,c]<>-1 then exit(f[a,b,c]);
if(a<=0)or(b<=0)or(c<=0)then w:=1
else
if(a>20)or(b>20)or(c>20)then w:=w(20,20,20)
else
if(a<b)and(b<c)then w:=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c)
else w:=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
f[a,b,c]:=w;
end;
begin
read(a,b,c);
fillchar(f,sizeof(f),255);
write('w(',a,', ',b,', ',c,') = ',w(a,b,c));
end.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询