在下列程序中: Program test(input,output); var i,j:integer; procedure calc(p1,p2:integer); begin p2:=p2*p2 p1:=p1-p2;p2:=p2

admin2019-03-04  28

问题 在下列程序中:
   Program test(input,output);
   var i,j:integer;
   procedure calc(p1,p2:integer);
   begin p2:=p2*p2 p1:=p1-p2;p2:=p2-p1;end{caic}
   begin{main}I:=2;j:=3;
   calc(i,j);write(j);
   end{main}
   当参数传递采用引用方式(Call by Reference)时,所得结果j=(16);
   当参数传递采用换名方式(Call by Name)时,所得结果j=(17):
   当参数传递采用赋值方式(Call by Value)时,所得结果j=(18)。
   递归是程序设计中很重要的一种控制结构,通常实现递归时,采用的数据结构是(19)。
   对那些既可以用递归方式,也可以用循环方式求解的问题,就执行效率而言(20)。

选项 A、难以断定
B、两者相同
C、循环优于递归
D、递归优于循环

答案C

解析 一个过程的过程体若包含对其自身的调用,则称此过程是直接递归的。若一个过程的过程体调用某过程,而该过程又调用原过程或经一系列调用后又回到对原过程的调用,则称此原过程是间接递归的。通常实现递归时采用的数据结构是栈,这是因为栈有先进后出的特性,可以保存调用时的“现场”,并在调用结束时恢复“现场”。栈是实现递归的简单途径。对于既可用递归方式求解,也可用循环方式求解的问题,就执行效率和资源而言,显然是循环优于递归,因为递归的开销大。
   当用户在调用点调用一个过程时,会通过参数传送信息,一个过程的形式参数用来向过程传送信息的标志符,实际参数用来在调用点向被调用过程传送信息。形式参数和实际参数之间的关系通常按位置来标定,不同程序语言所规定的参数信息传送方式不同。
   当采用引用方式或换名方式时,在过程中对形式参数的调用本质上是对实际参数单元的引用。先是给形式参数赋初值,而后,在过程中对该形式参数的赋值最终引起调用程序中实际参数值的改变。
   在本题中形式参数为p1和p2。实际参数初值为i=2和j=3,通过引用方式调用这两个参数,将执行以下计算过程:
   pl=2,p2=3,p2:=p2*p2=9,p1:=p1-p2=2-9=-7,p2:=p2-p1=9-(-7)=16
   所得结果为j=16。
   参数传送采用赋值方式时,从调用点向被调用过程传送的是实际参数的值。这一值成为过程中相应位置上形式参数的初值,此后该形式参数在过程中实际是局部变量,其结果无须返回给实际参数。在这种情况下,形式参数实际上是过程中的局部量,其值的改变不会导致调用点所传送的实际参数的值发生改变,也就是说数据的传送是单向的。
   本题中实际参数j仅起向形式参数p2赋初值的作用。过程中关于p2的运算对j不再起作用,因而过程调用结束后j的值仍为3。
转载请注明原文地址:https://jikaoti.com/ti/Vix7FFFM
0

相关试题推荐
最新回复(0)