zoukankan      html  css  js  c++  java
  • 计算一个数的阶乘和一个列表的逆序数

    问题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
    一个队列的逆序数
  • 相关阅读:
    解决eclipse自动格式化影响svn提交的问题
    XShell下载安装并连接阿里云
    阿里云服务器购买选择
    三线程循环打印ABC流程解释
    eclipse个人开发较常用的快捷键
    eclipse调试的一些技巧
    Java序列化与反序列化
    vmware vsphere添加磁盘,不重启检测
    win10国内生态-恶心的经历
    本地win10 vmware 虚拟机centos7系统初始化网络配置
  • 原文地址:https://www.cnblogs.com/walle-zhao/p/11687570.html
Copyright © 2011-2022 走看看