请求出此题的非递归算法,该如何解决

请求出此题的非递归算法
有如下代码:
int f(int m, int n)
{
    if (1 == m)
    {
      return n;
    }
    if (1 == n)
    {
      return m;
    }
    return f(m - 1, n) + f(m, n -1 );
}
这是一个递归算法,请问如何用非递归算法实现与之相同的功能?
------解决方案--------------------
引用:
Quote: 引用:

有如下代码:
int f(int m, int n)
{
    if (1 == m)
    {
      return n;
    }
    if (1 == n)
    {
      return m;
    }
    return f(m - 1, n) + f(m, n -1 );
}
这是一个递归算法,请问如何用非递归算法实现与之相同的功能?


f(m,n)的第p阶降次展开式为:
请求出此题的非递归算法,该如何解决




#include "stdafx.h"
#include <stdlib.h> 

int** matrix = NULL;

int Eval(int m, int n)
{
if ((m < 1) 
------解决方案--------------------
 (n < 1))
return -1;

int max = (m > n) ? m : n;

matrix = (int **)malloc((max + 1) * sizeof(int *));

for (int i = 0; i < (max + 1); i++)
{
matrix[i] = (int *)malloc((max + 1) * sizeof(int));
}

for (int i = 0; i < (max + 1); i++)
{
matrix[0][i] = i + 1;
matrix[i][0] = i + 1;
}

for (int i = 1; i < (max + 1); i++) // col
{
for (int j = i; j < (max + 1); j++) // row
{
matrix[j][i] = matrix[j-1][i] + matrix[j][i-1];
matrix[i][j] = matrix[j][i]; 
}
}

int val = matrix[m-1][n-1];

for (int i = 0; i < (max + 1); i++)
free(matrix[i]);

free(matrix);

return val;
}


 
int main(int argc, char* argv[])
{
for (int i = 1; i < 6; i++)
{
for (int j = 1; j < 6; j++)
{
printf("%5d", Eval(i,j));
}

printf("\n");
}

return 0;
}


请求出此题的非递归算法,该如何解决
------解决方案--------------------
#include "stdafx.h"
#include <iostream>

void greedyTest(int m, int n)
{
double* matrix = new double[m * n];

for (int i = 0; i != m; i++)
{
matrix[i] = i + 1;
}

for (int i = 0; i != n; i++)
{
matrix[m * i] = i + 1;
}

for (int i = 1; i != m; i++)
{
for (int j = 1; j != n; j++)
{
matrix[j * m + i] = matrix[j * m + i - 1] + matrix[(j - 1) * m + i];
}
}

for (int i = 0; i != m * n; i++)
{
std::cout << matrix[i] << "\t";

if ((i + 1) % m == 0)
{
std::cout << std::endl;
}
}

delete [] matrix;
}

int main()
{
greedyTest(8, 100);

system("pause");
return 0;
}