相关疑难解决方法(0)

循环真的比递归快吗?

根据我的教授的说法,循环比使用递归更快、更缺乏,但我想出了这个 C++ 代码,它使用递归和循环计算斐波那契数列,结果证明它们非常相似。所以我最大化了可能的输入以查看性能是否存在差异,并且由于某种原因递归比使用循环更好。有谁知道为什么?提前致谢。

这是代码:

#include "stdafx.h"
#include "iostream"
#include <time.h>
using namespace std;

double F[200000000];
//double F[5];

/*int Fib(int num)
{
    if (num == 0)
    {
        return 0;
    }

    if (num == 1)
    {
        return 1;
    }

    return Fib(num - 1) + Fib(num - 2);

}*/

double FiboNR(int n) // array of size n
{


    for (int i = 2; i <= n; i++)
    {
        F[i] = F[i - 1] + F[i - 2];
    }
    return (F[n]);
}

double FibMod(int …
Run Code Online (Sandbox Code Playgroud)

c++ recursion loops

2
推荐指数
1
解决办法
1686
查看次数

递归读取数组

我正在学习如何将递归应用于数组.

例如,我通常以这种方式读取数组:

void read_array(int *a, int n){
        int i;
        for(i = 0; i < n; ++i)
                scanf("%d", &a[i]);
        return;
}
Run Code Online (Sandbox Code Playgroud)

我想以递归方式读取数组.我写了以下函数:

void read_array(int *a, int n){
        int i = n - 1;
        if (n < 0)
                return;
        else{
                if(scanf("%d", &a[n - 1 - i]) == 1){
                        read_array(a, n - 1);
                        return;
                }
        }
}
Run Code Online (Sandbox Code Playgroud)

它编译,但在运行时会产生分段错误错误.它让我感到困惑,因为函数考虑了一个0应该阻止它的基础案例.

c arrays recursion

2
推荐指数
1
解决办法
581
查看次数

2
推荐指数
1
解决办法
135
查看次数

C ++在不使用pow或loop的情况下计算数字的幂

我是C ++的初学者,已经被赋予编写计算数字幂的函数的任务,但是我们不允许使用pow函数或循环。

函数的用户必须在命令窗口中输入基数和指数。

什么是开始的好地方?

c++ loops function exponent

2
推荐指数
1
解决办法
82
查看次数

有人可以像我五岁一样解释 OCaml 尾递归吗?

我无法将我的大脑围绕尾递归,特别是在 ocaml 中,也解释了为什么人们在最后调用“in”函数。PS我说的是最基本的尾递归函数。

ocaml

2
推荐指数
1
解决办法
747
查看次数

C程序中堆栈破坏的典型示例

有人可以教我一个常见的例子,你(!)你在C程序中销毁堆栈?我在Ubuntu中使用GCC.谢谢.

c stack memory-management

1
推荐指数
1
解决办法
302
查看次数

在 Scala 中从向量创建列表

我对 Scala 中一些非常基本的东西感到困惑。我正在读《Atomic Sc​​ala》这本书。我不是一个完整的编程初学者,但我所拥有的经验是相当表面的。没有实际的开发经验,只是修补字符串操作和那个级别的东西。

在本书中,其中一个练习(在参数化类型一节中)是定义一个方法,该方法将向量作为输入并给出一个列表作为输出,其中列表的元素与向量的元素相同。给定的向量可以是任意长度。

我不知道有什么方法可以在没有 for 循环的情况下做到这一点,并且没有将列表视为(至少在开始时)可变的。

这是我尝试过的:

def explicit(v:Vector[Double]):List[Double] = {
    var l = List()
    for (i <- v) {
        l = l :+ i
    }
    l
}
Run Code Online (Sandbox Code Playgroud)

但第四行似乎有问题。它踢出一条错误消息。

我有一种感觉,你可以在没有 for 循环的情况下做一些很酷的事情,你可以直接说“val l = List(~~~在这里插入一些很酷的火箭或其他东西~~~)但是这本书没有”还没有涵盖这个,或者我只是还没有弄清楚。

正如你所看到的,我在这里处于非常基础的水平,所以请尽可能像我五岁那样解释它。;)

编辑补充:我向前看了一点,看起来像几章之后我将学习“地图”方法,如果我准确浏览,它将为这个问题提供解决方案。但那是书的后面。知道如何在没有地图的情况下完成吗?

scala

1
推荐指数
1
解决办法
3346
查看次数

从理论上讲,Scala比Apache Spark更快.实际上并非如此.这是怎么回事?

大家好日子.我会尝试解释我的问题,这样你就能理解我.

在一些地方我发现它认为Scala比Python更快:

另外,据说Scala是最适合在Apache Spark中运行应用程序的编程语言:

https://www.dezyre.com/article/scala-vs-python-for-apache-spark/213

但是,在这个网站上,另一个用户(@Mrityunjay)问了一个类似于我在这里提出的问题:

Scala与Python的Spark性能

在这篇文章中,来自@ zero323的回复强调了以下内容:

  1. @ zero323显示了用Scala编写的程序与Python编写的程序在性能上的巨大差异.
  2. @ zero323解释了如何使用ReduceByKey等操作可以显着影响Spark应用程序的性能.
  3. @ zero323用GroupByKey替换ReduceByKey操作,因此他可以提高@Mrityunjay提出的程序的性能.

一般来说,回复说明是特殊的,并且通过@ zero323在Scala和Python之间进行修改可以实现非常相似的执行时间.

考虑到这些信息,我给自己编写了一个简单程序的任务,这个程序可以让我解释我的应用程序发生的类似情况,突出显示我在Scala中的代码比用Python编写的代码慢.为此,我避免使用ReduceByKey操作,只使用了map操作.

我将尝试执行任何超复杂的操作,以最大化群集占用(96核,48 GB RAM)并实现大延迟.为此,该代码生成一组100万个人工数据(仅用于计算处理100万个数据的执行时间,无论它们是否被复制),其中包含标识符ID,长度为10的向量DoubleS.

由于我的应用程序是使用DataFrame实现的,我在Scala中创建了两个程序,一个使用RDD,另一个使用DataFrame,目的是观察问题是否使用DataFrame.同样,一个等效的程序是用Python编写的.

通常,操作应用于每个RDD/DataFrame记录,其结果放在附加字段中,从而生成包含原始字段的新RDD/DataFrame和包含结果的新字段.

这是Scala中的代码:

import org.apache.spark.sql.SparkSession
import scala.math.BigDecimal

object RDDvsDFMapComparison {
  def main(args: Array[String]) {

    val spark = SparkSession.builder().appName("Test").getOrCreate()
    val sc = spark.sparkContext
    import spark.implicits._

    val parts = 96
    val repl = 1000000
    val rep = 60000000

    val ary = (0 until 10).toArray
    val m = Array.ofDim[Int](repl, ary.length)
    for (i <- 0 until repl)
      m(i) = ary

    val …
Run Code Online (Sandbox Code Playgroud)

python scala dataframe apache-spark rdd

1
推荐指数
1
解决办法
1005
查看次数

如何提高 Java 递归的速度

问题:如何使用其他技术加速递归方法。

简单的斐波那契数列方法使用递归来输出输入的第 N 个数字。

任何建议都会很棒,谢谢。

前任; 输入 50 需要将近一分钟才能最终获得输出。

编辑:更改问题文本,因为它不是递归太慢,而是我的代码。

public static long cycle(int x) {
  if(x<=1) {
    return x;
  } else {
    return cycle(x-1)+cycle(x-2);
  }
}
Run Code Online (Sandbox Code Playgroud)

java recursion

0
推荐指数
1
解决办法
1278
查看次数

简单的是或否循环Python3

所以我对python很新,但在创建基本的Yes或No输入时遇到了一些麻烦.我希望能够做一些事情,如果用户说是,如果用户说不做则做其他事情,并重复问题,如果用户输入的内容不是或不是.这是我的代码:

def yes_or_no():
    YesNo = input("Yes or No?")
    YesNo = YesNo.lower()
    if(YesNo == "yes"):
        return 1
    elif(YesNo == "no"):
        return 0
    else:
        return yes_or_no()

yes_or_no()

if(yes_or_no() == 1):
    print("You said yeah!")
elif(yes_or_no() == 0):
    print("You said nah!")
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这应该可行,但我一直都有问题.每当我第一次输入是或否时,它总是重复这个问题.它第二次工作正常.请让我知道我做错了什么.谢谢!

python

0
推荐指数
1
解决办法
6141
查看次数