矩阵连乘的递归问题
voidTraceback(inti,intj,int**s){if(i==j)return;Traceback(i,s[i][j],s);Traceback(s[i][...
void Traceback(int i, int j, int **s)
{ if (i == j) return;
Traceback(i, s[i][j], s);
Traceback(s[i][j] + 1, j,s);
cout << "Multiply A " << i << ", " << s[i][j];
cout <<" and A " << (s[i][j] + 1) << " , " << j << endl }
这段代码是通过s[i][j],确定加括号方式,构造矩阵连乘的最优解 但是这个递归看不懂 为什么会每递归一次都有输出呢 还有i=j的时候 返回到哪里去了 ?
能以图片的例子给我说一下Traceback(1,n,s)的详细步骤麽?谢谢~(n是矩阵个数,**s是记录最优的断点位置。) 展开
{ if (i == j) return;
Traceback(i, s[i][j], s);
Traceback(s[i][j] + 1, j,s);
cout << "Multiply A " << i << ", " << s[i][j];
cout <<" and A " << (s[i][j] + 1) << " , " << j << endl }
这段代码是通过s[i][j],确定加括号方式,构造矩阵连乘的最优解 但是这个递归看不懂 为什么会每递归一次都有输出呢 还有i=j的时候 返回到哪里去了 ?
能以图片的例子给我说一下Traceback(1,n,s)的详细步骤麽?谢谢~(n是矩阵个数,**s是记录最优的断点位置。) 展开
1个回答
展开全部
由于输出是在Traceback内部,因此每次递归调用Traceback,只要不是i==j而return,都会执行到cout部分。
i==j时,返回到递归调用的上一级了。
i==j时,返回到递归调用的上一级了。
更多追问追答
追问
可是每次Traceback(i, s[i][j], s);的时候不都是从头调用么 直到I=J的时候再执行Traceback(s[i][j] + 1, j,s);为什么会跳过第二个 Traceback(s[i][j] + 1, j,s); 就COUT了呢?
追答
递归return返回到上一级的时候,如果上一级本身就是第二个Traceback,那就直接进入cout了。建议使用VC或VS的递归栈查看功能来获取每一层递归Traceback是在哪一行。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询