《计算机系统:核心概念及软硬件实现(原书第4版)》——2.7 练习

简介:

本节书摘来自华章计算机《计算机系统:核心概念及软硬件实现(原书第4版)》一书中的第2章,第2.7节,作者:[美] J. 斯坦利·沃法德(J. Stanley Warford)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.7 练习

2.4节
1.主程序第一次调用图2-25中的函数sum,从第二次开始它就自己调用自己。*(a)该函数总共被调用了多少次?(b)画出函数第三次被调用后,主程序变量和运行时栈的情况。应该有3个栈帧。(c)画出从(b)调用返回前,主程序变量和运行时栈的情况。应该有3个栈帧,不过内容和(b)的不同。
2.给出图2-28中函数binCoeff的调用树,调用树的画法如图2-30所示,主程序中的调用语句如下:
*(a)binCoeff(4,1) (b)binCoeff(5,1)
(c)binCoeff(3,2) (d)binCoeff(4,4)
(e)binCoeff(4,2)
该函数被调用了多少次?程序执行期间,运行时栈上栈帧的最大数量是多少?程序是按照什么顺序进行调用和返回的?
3.对练习2中的情况,画出从下列函数调用返回前的运行时栈,运行时栈的画法如图2-29所示。
*(a)binCoeff(2,1) (b)binCoeff(3,1)
(c)binCoeff(1,0) (d)binCoeff(4,4)
(e)binCoeff(2,1)
在(e)中,binCoeff(2,1)被调用两次,画出从第二次对该函数进行调用返回前的运行时栈。
4.给出图2-32中逆转字符串数组字母顺序的程序的调用树,调用树的画法如图2-30所示。函数reverse被调用了多少次?在运行时栈上分配的栈帧最大数量是多少?画出第三次调用函数reverse后的运行时栈。
5.斐波那契数列是
image

每个斐波那契数列中的数是数列中它前面两个数之和。数列最开始有两个数,递归地定义为
fib(0)=0
fib(1)=1
fib(n)=fib(n - 1) + fib(n - 2)n > 1
画出下列斐波那契数的调用树:
(a)fib(3)    (b)fib(4)    (c)fib(5)
对上述每个调用,fib被调用了多少次?在运行时栈上被分配的栈帧最大数量是多少?
6.对于问题2.15中汉诺塔问题的解决方案,画出4个盘子情况的调用树。程序被调用了多少次?运行时栈上栈帧的最大数量是多少?
7.神秘数字递归地定义为
myst(0)=2
myst(1)=1
myst(n)=2*myst(n - 1) + myst(n - 2)n > 1
(a)画出myst(4)的调用序列。(b)myst(4)的值是什么?
8.检查下面的C++程序。(a)画出过程最后一次被调用后的运行时栈。(b)程序的输出是什么?
image

相关文章
|
存储 C++ Python
《计算机系统:核心概念及软硬件实现(原书第4版)》——导读
这种方法为讨论计算机科学中的核心问题提供了一种很自然的环境。例如,本书介绍了HOL6层的结构化编程,可以和Asmb5层的非结构化编程的可能性进行对比。书中讨论了goto争议、结构化编程/效率之间的折中,给出了两个层次上语言的实际例子。
1855 0

热门文章

最新文章