【发布时间】:2017-12-13 02:59:57
【问题描述】:
我正在使用递归实现 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);
【问题讨论】:
-
if(!valid(r,c)) return 1;这种情况不应该是return 0吗? -
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。特别是,包括您的问题案例的实际和预期输出。