堆!是否有可能在现代Haskell中定义Omega组合器(λx.xx)?我想,Haskell98的类型系统旨在使这样的事情变得不可能,但现代扩展呢?
我不明白递归如何工作得很好。
void f(int n)
{
if (n == 1)cout<<1<<" ";
else
{
f(n - 1);
cout<<n<<" ";
f(n - 1);
}
Run Code Online (Sandbox Code Playgroud)
如果我让 n = 4,这将输出1 2 1 3 1 2 1 4 1 2 1 3 1 2 1. 这是为什么?首先,n变得越来越小,直到达到 1,然后会发生什么?我真的无法理解这两个调用的作用,以及为什么第二个调用还在那里,因为第一个调用首先被调用。