许多在Recursion中调用函数

时间:2017-07-09 07:23:30

标签: c++ recursion

我正在使用递归实现maxPathSum函数,我不知道在函数中使用两个调用时会发生什么。我知道然后调用 二进制递归,并知道如何从这个问题的答复中思考它 Understanding double recursion

但是当我编写代码时,它没有给我正确的答案 [注意]所需的唯一方向是向右和向下

#include <iostream>
#include<algorithm>
using namespace std;
const int MAX=3;
int grid[MAX][MAX]={
                    {5,1,2},
                    {6,4,8},
                    {1,8,9}
};

bool valid(int r, int c);//check not get out grid
int maxPathSum(int r,int c);

int main()
{
    int sum=0;
    for(int i=0;i<MAX;i++)
    sum += maxPathSum(i,i);
    cout<<"the sum of the  longest path is: "<<sum;
}

int maxPathSum(int r,int c){
    if(!valid(r,c))
        return 1;

     //Reach the last element in the last right down
    if(r == MAX-1 && c == MAX-1)
        return grid[r][c];

    int path1=maxPathSum(r,c+1);//Right
    int path2=maxPathSum(r+1,c);//down

    return grid[r][c]+max(path1,path2);
}

 bool valid(int r, int c){
    if(r > MAX-1)
        return false;
    if(c > MAX-1)
        return false;

    return true;
}

当我在main中调用没有循环的函数时,它会给我正确的答案

类似于矩阵长度

const int MAX=2;
int grid[MAX][MAX]={
                    {5,2},
                    {1,8}
};
maxPathSum(0,0);

1 个答案:

答案 0 :(得分:0)

你正在做一笔双倍的金额。

return grid[r][c]+max(path1,path2)

这段代码已经对路径上的元素进行了总结。

for(int i=0;i<MAX;i++)
sum += maxPathSum(i,i);

maxPathSum将返回(i,i)和(2,2)之间路径上所有元素的总和。然后sum将包含对角元素上所有这些和的总和。我不认为你想要那个。

在main中调用maxPathSum(0,0)应该给出答案。

现在假设您调用maxPathSum(1,2)。然后,此函数将调用maxPathSum(2,2)和maxPathSum(1,3)。第一个将返回e22,后者将返回1.如果e22 = 0,结果将不正确。

我正在回答问题,即找到(0,0)和(max-1,max-1)之间的最大路径。如果问题未定义,则应明确指出。