0

比方说,我有一个功能,这需要花费大量的时间来运行。 而在主要我想多次调用这个函数与相同的参数。使用变量来存储函数调用?

我最终的问题是,我应该将返回值存储在变量中并使用它,或者多次调用该函数?哪种方式需要更少的计算?

现代语言(如果有的话)的编译器能够判断一个函数是否纯粹?如果是的话,编译器是否能够优化掉同一个块中的多个呼叫?如果是的话,那么我调用这些函数比使用占位符变量更合理(因为我会浪费计算来完成赋值/绑定名称)?

编辑:这里有一个例子

if myPureFunction(a,b) == 1: 
    print(1) 
elif myPureFunction(a,b) == 2: 
    print(2) 
elif myPureFunction(a,b) == 3: 
    print(3) 
else: 
    print(4) 

var = myPureFunction(a,b) 
if var == 1: 
    print(1) 
elif var == 2: 
    print(2) 
elif var == 3: 
    print(3) 
else: 
    print(4) 

在此先感谢。

+0

这是一个纯函数吗? –

+0

是的,我想假设这是一个纯粹的功能 – Joohwan

+1

如果你不知道这些问题的答案,那么你不必担心会失败,那么你担心这里和那里的循环可能是错误的(不是它不能被优化,只是你可能会错过更重要的东西)。 –

回答

1

你的答案是取决于您的编译器的优化。 如果函数“myPureFunction()”的主体位于相同的翻译单元(您的C文件)中,则某些编译器可以对第一个示例执行优化,并将3x函数调用替换为仅一个。 但并非所有编译器都可以进行此优化,而第二个版本会更好。 我说过了,因为我们的编译器(即我在我的工作中实现的)不能这样做=)

-1

我认为你可能要找的答案是递归。它意味着多次调用相同的函数,但是它会在每次函数调用时解决问题(但我并不完全理解你的实际问题)

这是来自TheNewBoston的一个简单的递归示例,帮你。

https://www.youtube.com/watch?v=fpuWkZs51aM

+2

你可能想再看看这个问题......我不认为你的答案与它有任何关系。 –