Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 什么使数据结构递归?_Recursion_Linked List_Tree_Graph Algorithm - Fatal编程技术网

Recursion 什么使数据结构递归?

Recursion 什么使数据结构递归?,recursion,linked-list,tree,graph-algorithm,Recursion,Linked List,Tree,Graph Algorithm,我读到的是其中的一段话如下: 在计算机编程语言中,递归数据类型(也称为递归定义、归纳定义或归纳数据类型)是可能包含相同类型的其他值的值的数据类型 我知道链表和树可以是递归数据类型,因为它包含相同数据结构的较小版本,就像树可以有子树一样 然而,我真的很困惑,因为固定大小的数组不也包含子数组吗?哪一种还是同一种 有人能举例说明是什么使数据结构递归吗?数据类型描述了数据是如何存储的(至少在逻辑上是这样的;在更深的层上,无论如何只有数字、位、晶体管等)。虽然一个数组(但只有非空数组)可以被视为加上另一个

我读到的是其中的一段话如下:

在计算机编程语言中,递归数据类型(也称为递归定义、归纳定义或归纳数据类型)是可能包含相同类型的其他值的值的数据类型

我知道链表和树可以是递归数据类型,因为它包含相同数据结构的较小版本,就像树可以有子树一样

然而,我真的很困惑,因为固定大小的数组不也包含子数组吗?哪一种还是同一种


有人能举例说明是什么使数据结构递归吗?

数据类型描述了数据是如何存储的(至少在逻辑上是这样的;在更深的层上,无论如何只有数字、位、晶体管等)。虽然一个数组(但只有非空数组)可以被视为加上另一个(子)数组(这种方法通常用于Lisp和Prolog等语言中的列表),但它通常是按元素存储的

例如,Prolog中的列表被定义为空列表(特殊情况)或与另一个列表(称为
tail
)连接的元素(称为
head
)。这将生成一个递归数据类型

另一方面,C中的列表可以定义为
struct list{char[100]data;int length;}
。这里的
list
in不用于定义
list
的方式(仅使用
char[]
int
),因此它不是递归数据类型

然而,我真的很困惑,因为固定大小的数组不也包含子数组吗

从概念上讲,可以说每个数组“包含”子数组,但在代码中数组本身并不是由较小的数组组成的。数组由连续的元素块组成,而不是由其他数组组成

递归结构(如您所提到的,链表)实际上包含其自身的版本:

class Node {
    Node head = null; // <-- Nodes can literally hold other Nodes
}
类节点{

Node head=null;//`不是固定大小的数组也包含子数组`可能,但这不是出于设计。根据设计,
类Node{public Node Parent;public Node[]Children;}
一个节点有一个节点作为其父节点,一个节点数组作为其子节点。根据定义,它会递归,而不仅仅是因为它有一个包含另一个节点的数组。
class Array<E> {
   E elem1 = ...; // <-- In the code, an array isn't made up of other arrays,
   E elem2 = ...; //      it's made up of elements.
    ...
}