是否存在递归到迭代或反之亦然的算法,具有最有效的输出和尾递归?
更好的语言是C#。
例如:在输入时,这个算法得到下一个简单的函数:
public static ulong Factorial(ulong n)
{
return n == 0 ? 1 : n * Factorial(n - 1);
}
处理后返回如下:
public static ulong Factorial(ulong n)
{
ulong result = 1;
for (ulong i = 1; i <= n; i++)
result = result * i;
re
这个练习是一个简单的具有挑战性的Java程序。输入内容包括:
数组"n“的大小,
数组A和
另一个大小为"n-1“的数组B的输入。
"finalsum“是数组A中所有元素的和
打印数组A中所有元素的正确顺序以达到最后和的最正确的算法是什么,即“最后和”,这样我们就避免了对数组B中的任何值进行求和。
Inputs: (split to three lines for clarity)
1.
3 //n, the size of the array
2 4 6 //array a of size n
4
我正在尝试编写一个树生长算法,其中树每年经历2个生长周期。第一个生长周期发生在春天,此时它的身高翻了一番。第二个生长周期发生在夏季,此时它的高度增加了1米。
我的问题是,现在,春天开始时种下了一棵新树。它的高度是1米。我想在N个生长周期后找出树的高度?
我做了一些关于递归函数的研究,其中的函数称为self。在这里,它使你写的代码比while循环更优雅和简单。不过,我在执行此函数时遇到问题
n = input('How long would you like the tree to for?: ')
def cycle(n):
if n == 0:
n = + 1
我正在使用Rubyv1.9.1为我在大学里的班级编写一个Ackermann-function程序。代码如下:
def ackermann(n,m)
if n == 0 && m > 0
return m+1
elsif n > 0 && m == 0
return ackermann(n-1,1)
elsif n > 0 && m > 00
return ackermann(n-1,ackermann(n,m-1))
else
puts "Wrong input, m
这可能不是做quicksort.my的常规做法,首先尝试一下,it.the数没有按它们应有的方式排序,我尝试过对随机的numbers.However列表进行排序,即使经过严格的检查,也无法识别逻辑错误。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int n;
int *expivot;
int *arr;
void quicksort();
void display();
int check();
main()
{
int i;
printf("to cont
我正在试着测试我对BigO的了解,不是很有信心,也不是完全不识字,但请指导。
这不是一个家庭作业,我不是一个学生,但有兴趣理解这个和其他各种相关的概念。
//What is bigO of this Application ?
public class SimpleBigOTest {
// What is BigO of this method -> I am certain it is O(n) but just checking
private void useItirativeApprachToPrintNto0(int n) {
for (in
在哪种情况下可以在PL/SQL中使用递归
CREATE OR REPLACE FUNCTION factorial (
n POSITIVE
) RETURN POSITIVE
IS
BEGIN
IF n = 1 THEN
RETURN n;
ELSE
RETURN n * factorial(n-1);
END IF;
END;
BEGIN
FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE(i || '! = ' || factorial(i));
END LOOP;
END;
这是可行的,但我想知道在
我用伪代码来表达算法。我只是想知道我的设计是否和下面显示的原始设计一样好。该算法假定计算n个奇数正整数的和。
这就是算法应该是什么样子:
procedure sumofodds(n:positive integer)
if n = 1
return 1
else
return sumofodds(n-1) + (2n-1)
这是我如何设计我的算法的:
procedure odd(n: positive integer)
if n = 1
return 1
if n % 2 > 0
return n
我正在开发一个程序,通过"Collatz猜想函数“运行第一个n个整数,表示为"c(x)",其中任何奇数都会被更新到三倍本身加1,而任何偶数都会被更新到自身的一半,它运行到这个数字被更新为1。这只是一个编程练习。我不想用这个来证明什么。我只想了解一些优化,比如位操作。
为了加速这个过程,我让它创建一个列表,列出它通过这个函数生成的每个唯一的数字,如果它生成一个先前生成的数字,那么它将转移到下一个输入。然而,这就产生了这样的问题:每次再次运行函数时,都要花费大量的时间检查列表中的每个元素(称为“num”)。
我使用的代码如下所示:
if x not in nums:
那么我该如何解决这个问题呢?我需要一个程序,它从标准输入读取一个正整数n,并将顶点集{1,2,3...n}上所有不同的有根、有序、带标签的树的表示写入标准输出。
对于输出,我需要使用树t的以下线性文本表示L(t)
If t is empty then L(t) = ().
If t has root n and children, in sibling order, C = (c1; c2; : : : ; ck), then
L(t) = (n, (L(c1), L(c2), : : :, L(ck)))
where, L(ci) denotes the linear textual
下面是一段python代码,它使用Goodrich and Tamassia这本书中的二进制递归来查找元素列表的总和。
def binary_sum(S, start, stop):
"""Return the sum of the numbers in implicit slice S[start:stop]."""
if start >= stop: # zero elements in slice
return 0
elif
我编写了一个工作良好的递归插入排序,但问题是,如果我设置n= 10000或5000或更高,无论数组的值是什么,应用程序都会停止工作。(例如矢量阵列(10000,0)
以下是代码:
void RecursiveInsertionSort(int i, vector<int> &arr)
{
if (i <= 0)
return;
RecursiveInsertionSort(i - 1, arr);
int key = arr[i];
int j = i - 1;
while (j >= 0 &
我的程序代码如下所示
#include <iostream>
#include <cmath>
using namespace std;
double pi (double);
int main()
{
cout << "Enter n to value of pi: "; double n; cin>>n;
cout << pi(n) << endl;
return 0;
}
double pi (double n)
{
if (n==1)
return 4*1;
else
r
我试图理解生成数组排列的算法的时间和空间复杂性。给定一个部分构建的排列,其中已经从k元素中选择了n元素,该算法从其余的n-k元素中选择元素k+1,并调用自己来选择其余的n-k-1元素:
public static List<List<Integer>> permutations(List<Integer> A) {
List<List<Integer>> result = new ArrayList<>();
permutations(A, 0, result);
return result;
我的代码是:
vector<int> permutation(N);
vector<int> used(N,0);
void try(int which, int what) {
// try taking the number "what" as the "which"-th element
permutation[which] = what;
used[what] = 1;
if (which == N-1)
outputPermutation();
else
// try all possib