小编Eri*_*fka的帖子

递归lambda表达式可能吗?

我正在尝试编写一个调用自身的lambda表达式,但我似乎无法找到任何语法,即使它是可能的.

基本上我想将以下函数转移到以下lambda表达式中:(我意识到它是一个愚蠢的应用程序,它只是添加,但我正在探索我可以用python中的lambda表达式做什么)

def add(a, b):
   if a <= 0:
      return b
   else:
      return 1 + add(a - 1, b)

add = lambda a, b: [1 + add(a-1, b), b][a <= 0]
Run Code Online (Sandbox Code Playgroud)

但调用lambda形式的add会导致运行时错误,因为达到了最大递归深度.甚至可以在python中执行此操作?或者我只是犯了一些愚蠢的错误?哦,我正在使用python3.0,但我认为这不重要吗?

python recursion lambda

18
推荐指数
3
解决办法
5452
查看次数

具有嵌入式函数调用的C++输出评估顺序

我是一个介绍C++类的TA.上周在测试中询问了以下问题:

以下程序的输出是什么:

int myFunc(int &x) {
   int temp = x * x * x;
   x += 1;
   return temp;
}

int main() {
   int x = 2;
   cout << myFunc(x) << endl << myFunc(x) << endl << myFunc(x) << endl;
}
Run Code Online (Sandbox Code Playgroud)

对我和我的所有同事来说,答案显然是:

8
27
64
Run Code Online (Sandbox Code Playgroud)

但是现在有几个学生已经指出,当他们在某些环境中运行时他们实际上是相反的:

64
27
8
Run Code Online (Sandbox Code Playgroud)

当我在我的Linux环境中使用gcc运行它时,我得到了我期望的结果.在我的Windows机器上使用MinGW,我得到了他们正在谈论的内容.它似乎是先评估对myFunc的最后一次调用,然后是第二次调用然后是第一次调用,然后一旦它具有所有结果,它就按正常顺序输出它们,从第一次开始.但由于呼叫是按顺序进行的,因此数字相反.

在我看来,它是一个编译器优化,选择以相反的顺序评估函数调用,但我不知道为什么.我的问题是:我的假设是否正确?这是背景中发生的事吗?或者有什么完全不同的东西?另外,我真的不明白为什么向后评估函数然后评估输出前进会有好处.由于ostream的工作方式,输出必须是前进的,但似乎功能的评估也应该是前进的.

谢谢你的帮助!

c++ gcc mingw

9
推荐指数
2
解决办法
967
查看次数

标签 统计

c++ ×1

gcc ×1

lambda ×1

mingw ×1

python ×1

recursion ×1