请求出此题的非递归算法,该如何解决
请求出此题的非递归算法
有如下代码:
------解决方案--------------------

------解决方案--------------------
有如下代码:
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 );
}
------解决方案--------------------
#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;
}