整数的分划问题(续)---非递归法

上一篇讨论的是整数划分问题递归方法,下面来讨论下非递归方法:

一般情况下,遇到递归问题,若能直接求得递推式,则可以很容易用数组模拟来实现递归,根据已经得出的递归关系,可以设置一个二维数组S[][]来存储数据:关系如下:

for(i=1;i<=n;i++)
{  

   S[i][1]=1;
    S[1][i]=1;
}

for
(i=2;i<=n;i++)
{

   for
(j=2;j<=m;j++)
   {

     i f(i==j)
           S[i][j]=1+S[i][i-1];
       else if
(i<j)
           S[i][j]=S[i][i];
       else

           S[i][j]=S[i-j][j]+S[i][j-1];
   }

}


代码如下:

#include <stdio.h>

int a[130][130];
void fun(int n);

int main()
{
	int n;
	while (scanf("%d",&n)!=EOF)
	{
		fun(n);
	}
	return 0;
}

void fun(int n)
{
	int i,j;
	for (i=1;i<=n;i++)
	{
		a[i][1]=a[1][i]=1;
	}

	for (i=2;i<=n;i++)
	{
		for (j=2;j<=n;j++)
		{
			if (i==j)
			{
				a[i][j]=1+a[i][j-1];
			}
			else if (i<j)
			{
				a[i][j]=a[i][i];
			}
			else
			{
				a[i][j]=a[i][j-1]+a[i-j][j];
			}
		}
	}

	printf("%d\n",a[n][n]);
}


你可能感兴趣的:(存储,fun)