gpt4 book ai didi

pointers - D中使用指针实现递归函数

转载 作者:行者123 更新时间:2023-12-02 08:03:50 25 4
gpt4 key购买 nike

我目前正在尝试实现一个递归函数,该函数从数字列表构建一棵树。我目前有这个:

Node makelist(Integer[] nums) {
if (nums.length == 1) {
return Node(nums[0]);
} else {
Integer half = nums.length/2;
return Node(makelist(nums[0..half]), makelist(nums[half..$]));
}
}

Node 是一个对象时,这对我来说效果很好。但是,我希望 Node 是一个结构。结果,我为 Node 编写了以下代码:

struct Node {
Node* left, right, parent;
Integer val;

this(Integer val) {
this.val = val;
}

this(Node* left, Node* right) {
this.left = left;
this.right = right;
val = min(left.val, right.val);
left.parent = &this;
right.parent = &this;
}
}

现在,编译器显然不太喜欢这样。但是,我不知道如何获取 makelist 返回的地址,将构造函数的参数转换为指针。基本上,我想将 ref Node 作为 leftright 传递(但编译器也在这里),或者指针(但是我似乎也无法让这些工作)。

我是低级代码的新手,希望得到一些帮助来使其正常工作。基本上,我想使用上面描述的递归makelist,并且有两个Node的构造函数。我怎样才能做到这一点并保持 Node 为一个结构?

最佳答案

我不确定你到底想要什么,但是这个怎么样:

import std.stdio;
import std.algorithm;

alias Integer = size_t;

alias Node = _Node*;

struct _Node {
Node left, right, parent;
Integer val;

this(Integer val) {
this.val = val;
}

this(Node left, Node right) {
this.left = left;
this.right = right;
val = min(left.val, right.val);
left.parent = &this;
right.parent = &this;
}
}

Node makelist(Integer[] nums) {
if (nums.length == 1) {
return new _Node(nums[0]);
} else {
Integer half = nums.length/2;
return new _Node(makelist(nums[0..half]), makelist(nums[half..$]));
}
}

关于pointers - D中使用指针实现递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24154696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com