数组在定义时没有必要指定数组的长度,其长度可以在程序中根据元素个数再决定。哪里错了
数组在定义必须指定长度, 不然无法分配内存空间;
之所以 int a[] = {1,2,3} 这种不需要定义长度,是因为它是定义的时候并初始化,编译器是可以根据 初始化的元素个数来确定数组长度的
数组的长度是不可变的,初始时必须指定长度,或者指定内容
在C语言中或大部分语言,数组在定义时必须指定数组的长度。这是因为数组在内存中需要连续的空间来存储元素,而这个空间的大小需要在编译时确定。如果在定义数组时没有指定长度,编译器将无法为数组分配足够的内存空间。
然而,有些编程语言提供了动态数组或者可变长度数组的概念,可以在程序运行时根据需要动态地改变数组的大小。这些动态数组通常是通过使用动态内存分配来实现的,例如在C++中使用std::vector
,在Java中使用ArrayList
。在这些情况下,确实可以根据元素的个数来决定数组的长度,但这并不是所有编程语言中都适用的规则。
根据斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
递归实现:
class Solution():
def Fibnacci(self,n):
''' 递归函数
输出斐波那契数列'''
return 0
if n == 1:
return 1
return self.Fibnacci(n-1) + self.Fibnacci(n-2)
#获取用户输入
nterms = int(input("您要输出几项? "))
#检查输入的数字是否正确
if nterms <= 0:
print("输入正数")
else:
print("斐波那契数列:")
for i in range(nterms):
print(recur_fibo(i))
执行以上代码输出结果为:
您要输出几项? 10
斐波那契数列:
0
1
1
2
3
5
8
13
21
34
非递归实现:
def Fibnacci(n):
result = [0,1]
if n <= 1:
return result[n]
for i in range(2,n+1):
result.append(result[i-1]+result[i-2])
return result[n]
数组长度的决定与数组的初始化方式有关。当我们通过new关键字来创建一个数组时,需要指定数组的大小或者用一组确定的值来初始化这个数组。例如:
int[] arr1 = new int[10]; //创建一个长度为10的int类型数组,初始值为0 int[] arr2 = {1, 2, 3}; //创建一个含有3个元素的int类型数组,初始值为1,2,3
当我们不指定数组初始化值时,Java会给数组分配默认值。例如:int数组的默认值为0,boolean数组的默认值为false,对象数组默认值为null。通过这种方式创建的数组,其长度就已经确定了,不会受到后续元素个数的影响。
另外值得注意的是,我们在使用Java中的集合类(如List、Map等)时,不需要像数组一样需要在创建时指定长度,它们可以根据元素的增加自动扩容。因此,在Java中,数值类型的数组通常是一个固定长度的集合,而集合类的长度可以在运行时动态改变。