根据我的教授的说法,循环比使用递归更快、更缺乏,但我想出了这个 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) 我正在学习如何将递归应用于数组.
例如,我通常以这种方式读取数组:
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应该阻止它的基础案例.
为什么java.util.Arrays中的binarySearch()方法使用循环而不是使用递归来实现?
我是C ++的初学者,已经被赋予编写计算数字幂的函数的任务,但是我们不允许使用pow函数或循环。
函数的用户必须在命令窗口中输入基数和指数。
什么是开始的好地方?
我无法将我的大脑围绕尾递归,特别是在 ocaml 中,也解释了为什么人们在最后调用“in”函数。PS我说的是最基本的尾递归函数。
有人可以教我一个常见的例子,你(!)你在C程序中销毁堆栈?我在Ubuntu中使用GCC.谢谢.
我对 Scala 中一些非常基本的东西感到困惑。我正在读《Atomic Scala》这本书。我不是一个完整的编程初学者,但我所拥有的经验是相当表面的。没有实际的开发经验,只是修补字符串操作和那个级别的东西。
在本书中,其中一个练习(在参数化类型一节中)是定义一个方法,该方法将向量作为输入并给出一个列表作为输出,其中列表的元素与向量的元素相同。给定的向量可以是任意长度。
我不知道有什么方法可以在没有 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比Python更快:
另外,据说Scala是最适合在Apache Spark中运行应用程序的编程语言:
https://www.dezyre.com/article/scala-vs-python-for-apache-spark/213
但是,在这个网站上,另一个用户(@Mrityunjay)问了一个类似于我在这里提出的问题:
在这篇文章中,来自@ zero323的回复强调了以下内容:
一般来说,回复说明是特殊的,并且通过@ 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) 问题:如何使用其他技术加速递归方法。
简单的斐波那契数列方法使用递归来输出输入的第 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) 所以我对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)
从理论上讲,这应该可行,但我一直都有问题.每当我第一次输入是或否时,它总是重复这个问题.它第二次工作正常.请让我知道我做错了什么.谢谢!