0
我正在使用递归实现maxPathSum函数,并且我不知道在函数中使用两个调用时会发生什么.i知道那么称为 二进制递归,并知道如何从此考虑它关于这个问题的答复 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;
}
当我打电话功能主要没有循环有时它给我r飞行回答
这样低的矩阵长度
const int MAX=2;
int grid[MAX][MAX]={
{5,2},
{1,8}
};
maxPathSum(0,0);
'if(!valid(r,c))return 1;'这个情况不应该是'return 0'吗? – Arcinde
欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。特别是,包括您的问题情况的实际和预期产量。 – Prune