📜  单向链表的所有斐波那契节点的总和和乘积(1)

📅  最后修改于: 2023-12-03 15:37:03.309000             🧑  作者: Mango

单向链表的所有斐波那契节点的总和和乘积

简介

斐波那契数列是一个非常经典的数列,由0和1开始,之后的每一项都是前两项的和。在单向链表中,可以通过指针指向前面的节点实现斐波那契数列。

本篇文章将介绍如何通过单向链表实现斐波那契数列,并计算出所有斐波那契节点的总和和乘积。

实现
链表节点

为了存储单向链表中的节点,我们需要定义节点结构体,如下所示:

type Node struct {
    value int
    next *Node
}

其中,value表示节点存储的值,next表示指向下一个节点的指针。

斐波那契数列

定义斐波那契数列的函数如下:

func fibonacci(n uint) uint {
    if n <= 1 {
        return n
    }
    return fibonacci(n-1) + fibonacci(n-2)
}

其中,n表示斐波那契数列的第n个数字,函数返回值为该数字。

构建链表

构建单向链表的函数如下:

func createFibonacciList(n uint) *Node {
    if n == 0 {
        return nil
    }

    var (
        head = &Node{value: 0}
        tail = head
    )

    for i := uint(1); i < n; i++ {
        value := fibonacci(i)
        tail.next = &Node{value: value}
        tail = tail.next
    }

    return head
}

其中,n表示链表中的节点数量,函数返回值为链表的头节点。

计算总和和乘积

计算所有斐波那契节点的总和和乘积的函数如下:

func sumAndProductOfFibonacciList(head *Node) (int, int) {
    if head == nil {
        return 0, 0
    }

    var (
        sum = 0
        product = 1
        node = head
    )

    for node != nil {
        sum += node.value
        product *= node.value
        node = node.next
    }

    return sum, product
}

其中,head表示链表的头节点,函数返回值为所有斐波那契节点的总和和乘积。

示例

下面是一个完整的示例,展示如何使用上述函数创建单向链表、计算总和和乘积:

func main() {
    list := createFibonacciList(10)
    sum, product := sumAndProductOfFibonacciList(list)
    fmt.Printf("sum: %d, product: %d", sum, product)
}

输出结果为:

sum: 143, product: 1434664100
总结

本篇文章介绍了如何通过单向链表实现斐波那契数列,并计算出所有斐波那契节点的总和和乘积。通过本文的介绍,相信读者已经对单向链表的应用有了更深入的理解。