• 计算一个数的阶乘和一个列表的逆序数


    问题1:计算一个数的阶乘,也是一个全排列的问题。

    比如:将数字1,2,3按照不同元素排成一列,总共有多少种排法?

    3*2*1=6。也就是数字3的阶乘。

    那么怎么用程序来实现呢?

    def factorial(num):
        """
        递归算法
        :param num:
        :return:
        """
        if num == 1:
            return 1
        return num * factorial(num - 1)
    阶乘的递归算法

    在递归函数中,由于会有函数栈帧的开销,所以它的运行效果并不如非递归函数的好。

    def factorial1(num):
        """
        非递归算法
        :param num:
        :return:
        """
        res = 1
        while num > 0:
            res *= num
            num -= 1
        return res
    阶乘的循环实现

    问题2:计算一个数列的逆序数。

    逆序数:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。一个排列中所有逆序总数叫做这个排列的逆序数。也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。

    def get_reverse_num(lst):
        res = 0
        for i in range(len(lst)):
            s = 0
            for j in range(i):
                if lst[j] > lst[i]:
                    s += 1
            res += s
        return res
    一个队列的逆序数
  • 相关阅读:
    Git 总结
    .net报错大全
    对于堆和栈的理解
    html 局部打印
    c#面试问题总结
    算法题总结
    h5-plus.webview
    堆和栈,引用类型,值类型,指令,指针
    .NET framework具体解释
    前端之间的url 传值
  • 原文地址:https://www.cnblogs.com/walle-zhao/p/11687570.html
Copyright © 2020-2023  润新知