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.
...
}