Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 命令式编程和函数式编程的效率_Performance_Algorithm_Functional Programming_Asymptotic Complexity_Imperative Programming - Fatal编程技术网

Performance 命令式编程和函数式编程的效率

Performance 命令式编程和函数式编程的效率,performance,algorithm,functional-programming,asymptotic-complexity,imperative-programming,Performance,Algorithm,Functional Programming,Asymptotic Complexity,Imperative Programming,我有一个关于IP和FP性能的问题。 假设我有一个计算第n个斐波那契数的函数 在命令式编程中,我可以选择使用迭代方式、递归或动态编程来计算第n个斐波那契数。当然,迭代法和动态规划比递归渐进法性能更好 在函数式编程中,假设不涉及任何状态,那么我只能以递归的方式进行 在这种情况下,难道这不意味着函数式编程在效率方面总是与命令式编程相同或更慢(渐近) 现实世界的函数式编程是如何处理这个问题的?没有一种递归的方法来实现斐波那契数。您可以轻松编写一个递归函数,在O(n)时间内计算第n个Fibonacci数-

我有一个关于IP和FP性能的问题。 假设我有一个计算第n个斐波那契数的函数

在命令式编程中,我可以选择使用迭代方式、递归或动态编程来计算第n个斐波那契数。当然,迭代法和动态规划比递归渐进法性能更好

在函数式编程中,假设不涉及任何状态,那么我只能以递归的方式进行

在这种情况下,难道这不意味着函数式编程在效率方面总是与命令式编程相同或更慢(渐近)


现实世界的函数式编程是如何处理这个问题的?

没有一种递归的方法来实现斐波那契数。您可以轻松编写一个递归函数,在O(n)时间内计算第n个Fibonacci数-其工作方式与迭代版本相同(即,它将跟踪您计算的最后两个数),但使用尾部递归而不是命令式循环。由于许多函数式语言需要实现来执行尾部调用优化,因此与迭代版本相比,甚至不会有恒定的开销

当然,甚至还有一些方法可以计算次线性时间内的第n个斐波那契数(使用闭合形式或矩阵乘法),这在函数式语言和命令式语言中同样有效


关于动态编程:用函数式语言进行动态编程是完全可能的。由于动态规划算法不会在数组的某个字段第一次编写时改变它,因此这里与函数编程并不矛盾。您所需要的只是在构建阵列时能够访问阵列中已构建的部分。Haskell中存在的惰性数组可以很好地实现这一点。

您对命令式编程和函数式编程都做了大量假设。有几种函数式语言允许在性能是首要问题的情况下使用不纯正的行为。