C++程序 查找系列-1、2、11、26、47……的第N个项

C++程序 查找系列-1、2、11、26、47……的第N个项

什么是该系列?

这个系列其实就是一个递推数列,即每一项都是由前面的项推出来的,公式如下:

a_1 = 1

a_2 = 2

a_n = a_{n-1} + (n-1)^2

因此,该数列的前若干项为:

1, 2, 11, 26, 47, 74, 107, 146, 191, 242, …

怎样编写程序来查找该系列的第N项?

我们可以使用递归或循环来实现此功能。

使用递归

递归是一种函数可以调用自身的方法。在这里,我们可以使用递归来查找该系列的第N项,代码如下:

def recursion(n):
   if n == 1:
      return 1
   elif n == 2:
      return 2
   else:
      return recursion(n-1) + (n-1)**2

print(recursion(6)) # 输出74

上述代码中,我们定义了一个递归函数recursion,它接收n作为参数。如果n小于等于2,则直接返回该项的值。否则,递归调用recursion函数来获取前一项的值,并加上 (n-1)^2 得到当前项的值。

我们可以通过调用recursion函数来获取该系列的第N项。如上代码所示,我们调用recursion(6)来获取该系列的第6项,输出结果为74。

然而,递归随着数据规模的增大,其消耗的时间和空间也将增加。

使用循环

循环是一种重复执行特定任务的结构。在这里,我们可以使用循环来查找该系列的第N项,代码如下:

def loop(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        a, b = 1, 2
        for i in range(3, n+1):
            c = b + (i-1)**2
            a, b = b, c
        return c

print(loop(6)) # 输出74

首先,我们同样要先特判前两项。如果n小于等于2,则直接返回该项的值。

否则,我们定义了a=1和b=2作为前两项。从第3项开始,我们通过循环逐个计算得到该系列的第N项的值。

与递归方法不同的是,我们需要一个额外的变量c来存储当前项的值。

最后,我们可以通过调用loop函数来获取该系列的第N项。如上代码所示,我们调用loop(6)来获取该系列的第6项,输出结果为74。

时间复杂度和空间复杂度

使用递归时,程序将不断的调用自己,因此会生成更多的函数调用,导致时间复杂度变高。同时,递归需要维护一个函数调用栈,会使得空间复杂度变高。

而使用循环时,我们只需要一个额外的变量来存储当前项的值,因此空间复杂度较低。与递归方法不同的是,循环方法不会产生额外的函数调用,因此时间复杂度较低。

结论

因此,我们建议使用循环方法来查找该系列的第N项。使用循环方法,我们可以通过较少的时间和空间复杂度来获取该系列的第N项的值。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例