一道递归的pascal题

来源:百度知道 编辑:UC知道 时间:2024/09/27 12:27:24
一个凸N边形,通过N边形内部互不相交的对角线,把N边形拆分成若干个三角形,不同拆分方案的数目用H(N)表示。已知递归函数如下:

H(N)=H(2)*H(N-1)+H(3)*H(N-2)+……+H(N-1)*H(2),(为什么?)

H(2)=1。

请编写计算H(N)的递归程序。

怎么做??讲解丅,谢谢!

程序很简单program digui;INT N;function h(n):longint;var i,hi:longint;beginif(n=2)or(n=3)then h=1else beginhi:=0;for i:=1 to n-1 dohi:=hi+h(i)+h(n+1-i);h:=hi;end;end;BEGINreadln(n);writeln(h(n));END.至于递归等式的原理,先给你看张图:



这是一个六边形,现在要求H(6)。关键是划分情况。如图,找到一点+一边,除了中间三角形外还有一个三角形+一个四边形。这就是多项式中的H(3)+H(4)。其它的项只是所选的点和边不同罢了。最后把所有的情况相加,就得结果

program PrintHN;
var
{N多边形}
N: Integer;
{求拆分方案的函数}
function getHN(n: Integer): Integer;