C++ 递归中函数的多次调用

C++ 递归中函数的多次调用,c++,recursion,C++,Recursion,我使用递归实现maxPathSum函数,我不知道在函数中使用两个调用时会发生什么,我知道这就是调用 二进制递归,并且知道如何从这个问题的回答中思考它 但是当我写代码时,它没有给我正确的答案 [注意]唯一需要的方向是向右和向下 #include <iostream> #include<algorithm> using namespace std; const int MAX=3; int grid[MAX][MAX]={ {5,1,

我使用递归实现maxPathSum函数,我不知道在函数中使用两个调用时会发生什么,我知道这就是调用 二进制递归,并且知道如何从这个问题的回答中思考它

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

#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;
}

你赚了双倍的钱

return grid[r][c]+max(path1,path2)
这段代码已经对路径上的元素求和

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

对于(int i=0;i
如果(!valid(r,c))返回1;
这种情况不应该是
返回0
?欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于此处。特别是,包括问题案例的实际和预期输出。
for(int i=0;i<MAX;i++)
sum += maxPathSum(i,i);