-
不,这是实际和正式参数表的问题。
调用函数时输入的参数是实际参数。
您在此处使用的是 value 参数。
实际参数将值传递给形式参数。
形式参数在函数内部执行,而不是实际参数。
当函数中的形式参数与主程序中的变量同名时,函数中的变量标识符表示形式参数,而主程序中的变量无效,即主程序中的变量无效。
主程序中变量的作用域:
整个程序“减去”包含与程序中的变量同名的变量或形式参数的函数。
由于进程的递归。
会有很多“A”。
总读取量有多大。
有多少个“A”就有多少个
虽然都是 A,但程序正在运行。
将它们视为不同的变量。
每个递归调用一次程序。
将创建一个新的 A
原来的 A 暂时无效。
等到递归进程运行完毕。
原始 A 再次有效。
此递归的当前 a 的真值仍然取决于实际参数和形式参数之间的一对一对应关系,例如:this call。
move(n-1,b,a,c);
由于过程是这样定义的。
procedure move(n,a,b,c:integer);
所以主流程中的b; 价值被传递了。
a 在子进程中
当子进程运行时。
A 携带原始 b 的值来参与操作。
直到子进程运行到最后。
有点啰嗦。 让我们自己找到一些有关参数的信息。
-
lz 错了,递归是有约束条件的,所以源程序应该是这样的:
vara,b,c:integer;
n:byte;
procedure hanoi(n:byte;a,b,c:char);
beginif n=1 then writeln('move',a,'to',c)
else begin
hanoi(n-1,a,c,b);
writeln('move',a,'to',c);
hanoi(n-1,b,a,c);
end;end;
begina:='a';b:='b’;c:='c';
write('n=');readln(n);
hanoi(n,a,b,c);
end.
-
lz 你这个程序编译和传递???
a、b 和 c 都是整数字符,也是赋值字符???
jjf,
-
1、2 和 3 的值会随着递归的进行和退出而变化,例如在您的河内 (n-1,one,three,two) 中,2 和 3 的值在下一个循环中交换。
-
以递归方式调用时,一二三的值会发生变化。
-
var n,i,s:longint;
procedure asd(a,b,c:char;n:longint);
beginif n=1 then writeln(a,'->'和 c)输出过程。
else begin
asd(a,c,b,n-1);递归地,这里要求 lz 自己思考,为什么是 a、c、b
writeln(a,'->',c);输出过程ASD(b,a,c,n-1); 递归地,也让 lz 思考结束;
end;begin
readln(n);
s:=1;for i:=1 to n do s:=s*2;计数步数 writeln(s-1);
asd('a','b','c',n);
end.
-
此问题的过程如下,使用递归调用:
varn:longint;
procedure hanoi(n:longint;a,b,c:char);
beginif n=1 then writeln(n,' ',a,' ',c)else
beginhanoi(n-1,a,c,b);
writeln(n,' ',a,' ',c);
hanoi(n-1,b,a,c);
end;end;
beginreadln(n);
hanoi(n,'a','c','b');
end.
-
var n:longint;
beginreadln(n);
writeln(trunc(exp((n+1)*ln(2)))1);
end.如果太大,请使用高精度。
这是半决赛的第四个问题。
-
这是一个递归调用的例子,下面页面有关于这个问题的更多细节,包括源程序、递归调用分析等。
-
这是一个递归调用。
参见“过程 hanoi (n:integer; a,b,c:char);和。
hanoi(n,'a','b','c');第二句中的n在程序中传输到n,表示塔的列数;
a'A转移到程序中,它表示存储在第一列上的板;
b'B转移到程序中,代表储存在第二列上的板;
c'转移到程序的 C 代表存储在第三列上的板;
程序,既然已经动了,n自然会减少一个! 呼叫“河内(N-1,A,C,B); 它体现了 A 和 C 的交换。
-
递归调用。 我曾经告诉一个家伙 C 版本。
使用随机数。
private static char constant =a','b','c','d','e'; >>>More