tail-recursion 相关问题

尾递归是一种递归策略,其中函数执行一些工作,然后调用自身。 “尾部”指的是递归位于函数的最后。许多 - 特别是功能 - 编程语言编译器可以将这些类型的调用转换为迭代,这意味着可以使用受支持语言中的尾递归而不必担心堆栈溢出,无论调用的数量如何。

如何让 TypeScript 执行尾递归优化?

const isPositive = (n: 数字) => n > 0; 函数fitsIn(被除数:数字, 除数:数字, 计数:数量, 累加:数字):数字{ 如果(准确...

回答 2 投票 0

返回一个大小随迭代而增加的列表的迭代过程与返回标量的列表有什么不同吗?

这实际上是因为我最初误读了练习1.12的文本。 请求确实是为了 编写一个过程,通过递归过程计算帕斯卡三角形的元素。 我

回答 1 投票 0

尝试在 OCaml 中复制列表中的元素 n 次

我正在尝试编写一个函数,该函数需要如下输入: 重复 3 [1;2] ;; 并显示如下内容: [1;2;1;2;1;2] 现在我的代码是: 让重复 ls n = 让rec helper acc n l = ...

回答 2 投票 0

尾递归List.map

OCaml 中典型的 List.map 函数非常简单,它需要一个函数和一个列表,并将该函数递归地应用于列表的每个项目。我现在需要将 List.map 转换为 tail

回答 3 投票 0

为什么添加 tailrec 会导致错误的 kotlin corecursion 工作?

我在阅读《Joy of Kotlin》一书时遇到了这个有趣的问题。在第 4 章中,在解释尾递归时,作者提供了一个将两个数字相加的实现,如下所示。 尾部记录乐趣...

回答 1 投票 0

即使满足循环条件也会调用递归方法

public int removeMin(Integer[] arr, int count) { Integer[] tempArr = new Integer[arr.length -1]; 整数索引 = 0; 对于 (int i = 1; i public int removeMin(Integer[] arr, int count) { Integer[] tempArr = new Integer[arr.length -1]; int index = 0; for (int i = 1; i<arr.length; i++) { tempArr[index] = arr[i] - arr[0]; index++; } count = count+1; if (tempArr.length == 0){ return count; }else{ removeMin(tempArr, count); } return count; } 我希望函数在 tempArr.length == 0 时返回计数为 4。 输入参数: Integer[] arr = {2,5,8,11}; int count = 0; 我期望它返回 4,但它返回 1。 您需要按如下方式更改您的条件和回报。 if (tempArr.length != 0){ return removeMin(tempArr, count); } return count; 这是完整的代码。 public static int removeMin(int[] arr, int count) { int[] tempArr = new int[arr.length -1]; int index = 0; for (int i = 1; i<arr.length; i++) { tempArr[index] = arr[i] - arr[0]; index++; } System.out.println(Arrays.toString(arr)); count = count+1; if (tempArr.length != 0){ return removeMin(tempArr, count); } return count; }

回答 1 投票 0

为什么不起作用?有人可以解释堆栈中使用的内存分配、静态/非静态、全局/局部变量/深度复制

是一个简单的递归函数,将数组元素倒序打印。 当我调用 print 语句上方的函数时,它给我索引 -1 outOfBoundException。 当我在调用

回答 0 投票 0

GCC/Clang:禁用单个函数的尾递归优化

我知道我可以使用选项 -fno-optimize-sibling-calls 在 GCC 中禁用尾递归优化。但是,它禁用了整个编译单元的优化。 有没有办法...

回答 2 投票 0

是否优化了任何 JavaScript 引擎尾调用 (TCO)? [重复]

我有一个用 JavaScript 实现的尾递归寻路算法,想知道是否有任何(全部?)浏览器可能会出现堆栈溢出异常。

回答 6 投票 0

在 Scala 中制作递归代码,尾递归

我想将代码更改为尾递归,以免堆栈溢出 expression 是 Label 或 Tree 的 ADT def combine[A](expression: Expression, runners: List[Runner[A]]): Runner[A] = { ...

回答 2 投票 0

如何使用 2 个累加器编写递归函数?

我是 Python 的新手,递归对我来说是一个陌生的东西。对于我的作业,我有涉及尾递归、while 循环或由 _t、_w 或 _g 指定的生成器的函数,如果函数 ...

回答 0 投票 0

ocaml 尾递归函数

我正在使用 utop 运行 Ocaml,当我在非常长的输入上运行以下函数时: 让 string_to_list str = 让 rec 循环我限制 = 如果我=限制那么[] else (String.get str i) :: (循环 (i ...

回答 2 投票 0

遍历类迭代器数据结构的惯用 Scala 方法

给定一个来自遗留库的类,它的行为类似于 Iterator,这样您就可以使用 hasNext 和 next 遍历它的内容,但它没有实现 Iterator 接口: LegacyIterato 类...

回答 4 投票 0

如何在Scala中实现尾部递归快速排序?

我写了一个递归的版本: def quickSort[T](xs: List[T])(p: (T, T) => Boolean): List[T] = xs match{ case Nil => Nil case _ => val x = xs.head val (left, right) =...

回答 4 投票 4

递归函数 throw StackOverflowError

我在使用这个函数时遇到了问题。我需要处理超过100万条记录,但是这个函数崩溃了。看起来只是处理了几千条记录,对于更大的记录,会抛出一个StackOverflowError ...

回答 1 投票 0

将递归函数改写为尾部递归函数

问题:计算通过投掷一个或多个骰子来构造和n的方法的数量。每次投掷都会产生1到6之间的结果。解决方法:我写了一个递归的解决方案。我写了一个递归的解决方案... ...

回答 1 投票 0

一个python方法可以无限期地调用自己吗?

我有一个python方法,它时常执行一些任务。我觉得最简单的方法是写:class MyClass: def a(self): #执行任务 time.sleep(time_to_sleep) ... ...

回答 2 投票 0

尾部递归函数还能得到栈溢出吗?

我一直在codesignal.com用C-Lisp解决一些挑战,学习C-Lisp,我一直避免使用循环来做lisp风格的代码。在这个名为交替求和( alternatingSums)的挑战中,给你一个 ...

回答 0 投票 0

我可以将以下代码称为“尾递归”吗? -Haskell函数

我应该只实现尾递归函数。考虑到在每次调用时我都有三个函数在内部工作以得到答案,因此该代码尾是否是递归的? anyfunction ::(Ord a)=&...

回答 1 投票 -1

Prolog性能和递归类型

我在几个程序中使用置换,偶然发现了这个小实验:置换方法1:permute([],[])。 permute([X | Rest],L):-permute(Rest,L1),select(X,L,...

回答 4 投票 10

© www.soinside.com 2019 - 2024. All rights reserved.