递归问题<一>

这几天搞递归,差点没被搞死,先来看看这道题:
一个二维数组例如:
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;     // 往下走和往右走两种情况中和最大的那种,加上本数返回
}
= =这玩意用递归还算好搞,有的东西用递归我是在是想不明白,感觉还不如不用递归…………另外还记得曾经看到过一句话,递归和循环是等效的…………

转载于:https://www.cnblogs.com/bananapeel/archive/2011/08/30/2158838.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值