我有一段类似帕斯卡的代码:
const str = "three";
function foo(n : Integer) : String
const str = "two " ^ str;
function bar(n : Integer) : String
const str = "one" ^ str;
begin
if n=0 then bar := str
else bar := foo(n-1);
end;
begin
if n=0 then foo := str
else foo := bar(n-1);
end;
begin
writeln(foo(2));
writeln(foo(3));
end.
我想弄清楚输出是什么:
对于第一种情况,我认为它将是:"一一二三" 对于后一种情况,实际上,我不确定。
我知道静态绑定意味着实体(在我们的例子中是const" str")在编译期间被绑定/定义,谁调用哪个函数最后是无关紧要的,这意味着它可以通过阅读函数代码来推断。 我也知道动态绑定意味着实体(即" str")绑定依赖于调用堆栈。 相互递归让我有点困惑。那么我应该从每个案例中得到什么输出以及为什么?