递归问题<一>

这几天搞递归,差点没被搞死,先来看看这道题:
一个二维数组例如:
1,2,3
4,5,6
7,8,9
从左上角到右下角,每次只能向下或者向左走一步,求能得到最大和。
代码如下:
#include <iostream>
#include 
<vector>
using namespace std;

int getmaxpath(vector<vector<int> > list,int r,int l,int side);

int main()
{
    
int a[3][3= 
    {{
1,2,3},
    {
4,5,6},
    {
7,8,9}};
    vector
<vector<int> > v;
    
for(int i = 0 ; i < 3++i)    //传二维数组太麻烦= =于是我偷懒传向量。
    {
        vector 
<int> temp;
        
for (int j = 0 ; j < 3 ; ++j)
        {
            
            temp.push_back(a[i][j]);
        }
        v.push_back(temp);
    }

    cout 
<< getmaxpath(v,0,0,3<< endl;
    
return 0;
}

int getmaxpath(vector<vector<int> > list,int r,int l,int side)
{
    
if( r == l && l == side - 1)    //到了右下角返回这个数
    {
        
return list[r][r];
    }
    
else if(r == side-1)    //到了下边界则返回该数右边所有数的和,因为只能往右走了
    {
        
int temp = 0;
        
for(int i = l; i < side ;++i)
            temp 
+= list[r][i];
        
return temp;
    }
    
else if(l == side-1)    //同上,只不过是到了右边界要返回下面所有数的和
    {
        
int temp = 0;
        
for(int i = r; i < side ;++i)
            temp 
+= list[i][l];
        
return temp;
    }
    
int a,b;
    a 
= getmaxpath(list,r+1,l,side);  
    b 
= getmaxpath(list,r,l+1,side);
    
return list[r][l] + a>b?a:b;    //往下走和往右走两种情况中和最大的那种,加上本数返回
}
= =这玩意用递归还算好搞,有的东西用递归我是在是想不明白,感觉还不如不用递归…………另外还记得曾经看到过一句话,递归和循环是等效的…………

posted on 2011-08-30 16:02  coder?coder!  阅读(198)  评论(0)    收藏  举报