矩阵连乘的递归问题

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是记录最优的断点位置。)
展开
 我来答
冰火梦幻
2012-10-02 · TA获得超过2308个赞
知道小有建树答主
回答量:1095
采纳率:57%
帮助的人:432万
展开全部
由于输出是在Traceback内部,因此每次递归调用Traceback,只要不是i==j而return,都会执行到cout部分。

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是在哪一行。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式