对上面的公式进行非递归练习,用到二维数组。
//递归练习
#include<iostream>
using namespace std;
int f(int m,int n)
{
/*递归方式
if(1==m)
return n;
if(1==n)
return m;
if(m>1&&n>1)
return f(m-1,n)+f(m,n-1);*/
//非递归方式
int i,j;
int a[100][100];
for(i=0;i<m;i++)
a[i][0]=i+1;
for(j=1;j<n;j++)
a[0][j]=j+1;
for(i=1;i<m;i++)
for(j=1;j<n;j++)
a[i][j]=a[i-1][j]+a[i][j-1];
return a[m-1][n-1];
}
int main()
{
int m,n;
cout<<"Please enter m,n:";
while(scanf("%d %d",&m,&n)==2)
{
f(m,n);
cout<<"The result is:"<<f(m,n)<<endl;
cout<<"Please enter m,n:";
}
}
本文介绍了一种使用二维数组实现的非递归算法来替代递归方式解决问题的方法。通过具体的C++代码示例,展示了如何利用双重循环填充二维数组以达到计算目标,这种方法能够有效地避免递归带来的堆栈溢出等问题。

被折叠的 条评论
为什么被折叠?



