首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >像计算机一样思考的策略

像计算机一样思考的策略
EN

Stack Overflow用户
提问于 2011-01-16 00:38:17
回答 2查看 150关注 0票数 0

我在考试中有一些问题,我需要推导出以下代码的输出:

代码语言:javascript
运行
复制
01 int foo(int a) {
02 print 'F';
03 if (a <= 1) return 1;
04 return bar(a, foo(a-1));
05 }
06
07 int bar(int x, int y) {
08 print 'B';
09 if (x > y) return baz(x, y);
10 return baz(y, x);
11 }
12
13 int baz(int x, int y) {
14 print 'Z'
15 if (y == 0) return 0;
16 return baz(x, y-1) + x;
17 }
18
19 void main() {
20 foo(3);
21 }

我的问题是,解决这类问题的最佳策略是什么?当然,我不允许使用PC。另外,你可以使用c++中的急切求值或正常的顺序求值(输出当然会有所不同,但我只对战术感兴趣),我尝试使用堆栈来解决它,每次编写我调用的函数时,但无论如何它都很复杂,谢谢大家的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-16 01:00:12

我会使用“从下到上”的尝试:

baz是被调用的函数,但不调用其他函数(除了它自己)。它输出'Z‘精确的y + 1时间,返回代码为x*y (您在每次调用后添加x )。

bar是“下一个更高的”函数,它输出“B”一次,并调用baz,并将其较低的参数作为第二个参数--返回代码也是x*y

foo是"top“函数(紧跟在main之后),也是最复杂的函数。它不仅会输出一次'F',还会输出a次(因为在bar调用之前会计算末尾的foo(a-1)bar调用将afoo(a-1)相乘,这将使a-1foo(a-2)相乘,依此类推,直到计算出foo(1)并返回1。因此,返回代码为a * (a-1) * ... 2 * 1,因此为a!

这不是一个完整的分析f.e.我们不知道字符将以什么顺序输出,但这只是一个粗略的方案-就像你和其他人在评论中指出的那样,这是你想要的-战术而不是完整的答案。

票数 3
EN

Stack Overflow用户

发布于 2011-01-16 01:05:11

我可能会做的是从页面左上角的main()函数开始,写下执行的第一行,跟踪局部变量等,然后在它下面写下下一行,依此类推。

但是当一个函数被调用时,也要右移一列,首先写下函数的名称和该调用的输入参数的实际值,然后继续处理该函数中的行。

从函数返回时,向左移动并在两列之间写入返回值。

另外,为“标准输出”保留一个单独的区域,所有打印的文本都放在这里。

这些步骤应该会带你经历大多数“像计算机一样思考”的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4700739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档