Recursion_linlinlinle的博客-程序员宝宝

技术标签: 递归调用  programming  

目录

二分查找

阶乘函数

画尺子


二分查找

 

def binary_search(data,target,low,high):
    if low > high:
        return False
    else:
        mid = (low+high)//2
        if target == data[mid]:
            return True
        elif target < data[mid]:
            return binary_search(date,target,low,mid-1)
        else:
            return binary_search(data,target,mid+1,high)

 

public static boolean binarySearch(int[] data,int target, int low,int high){
        if (low>high)
            return false;
        else {
            int mid = (low+high)/2;
            if (target == data[mid])
                return true;
            else if (target<data[mid])
                return binarySearch(data,target,low,mid-1);
            else 
                return binarySearch(data,target,mid+1,high);
        }
    }

 阶乘函数

 

def factorial(n):
    if n == 0:
        return 1
    else:
        return n*factorial(n-1)

 

 public static int factorial(int n) throws IllegalArgumentException{
        if (n<0)
            throw new IllegalArgumentException();
        else if (n==0)
            return 1;
        else 
            return n*factorial(n-1);
    }

画尺子

def draw_line(tick_length,tick_label=''):
    '''根据长度tick_length画出刻度线'''
    line = '-' * tick_length
    if tick_label:
        line += ' ' + tick_label
    print(line)

def draw_interval(center_length):
    '''在上一个等级区间内,插入一个下一个等级刻度线'''
    if center_length >0:                #当长度下降到0时停止。
        draw_interval(center_length-1)  # recursively draw top ticks
        draw_line(center_length)        # draw center tick
        draw_interval(center_length-1)  # recursively draw bottom ticks

def draw_ruler(num_inches, major_length):
    draw_line(major_length,'0')
    for j in range(1,num_inches+1):
        draw_interval(major_length-1)   #按等级绘制内刻度线
        draw_line(major_length,str(j)) #负责最外围刻度线以及号码;

if __name__ == '__main__':
    draw_ruler(4,3)
public class drawRuler {
    /** Draws an English ruler for the given number of inches and major tick length. */
    public static void drawRuler(int nInches,int majorLength){
        drawLine(majorLength,0);
        for (int j=1;j<=nInches;j++){
            drawInterval(majorLength - 1);
            drawLine(majorLength,j);
        }
    }
    private static void drawInterval(int cetralLength){
        if (cetralLength >=1){
            drawInterval(cetralLength - 1);
            drawLine(cetralLength);
            drawInterval(cetralLength - 1);
        }
    }
    private static void drawLine(int tickLength, int tickLabel){
        for (int j=0;j<tickLabel;j++)
            System.out.print("-");
        if (tickLabel>=0)
            System.out.print("\n");
    }
    /** Draws a line with the given tick length (but no label). */
    private static void drawLine(int tickLength){
        drawLine(tickLength,-1);
    }
}

 

文件系统

现代操作系统以递归方式定义文件系统目录(也称为“文件夹”)。即一个文件系统由一个顶层目录组成,这个目录的内容由文件和其他目录组成,这些目录又可以包含文件和其他目录等。 我们将计算嵌套在特定目录中的所有文件和目录的总磁盘使用量。

 

Algorithm DiskUsage( path):
    Input: A string designating a path to a file-system entry
    Output: The cumulative disk space used by that entry and any nested entries
    total = size( path) {immediate disk space used by the entry}
    if path represents a directory then
        for each child entry stored within directory path do
            total = total + DiskUsage( child) {recursive call}
    return total

 

Python’s os Module

os.path.getsize(path) 返回由字符串path(例如/user/rt/courses)标识的文件或目录的即时磁盘使用情况(以字节为单位)。
os.path.isdir(path) 如果字符串path指定的是目录,则返回true;否则返回false
os.listdir(path) 返回字符串列表,这些字符串是由字符串路径指定的目录中所有条目的名称。在我们的示例文件系统中,如果参数为/user/rt/courses,则返回列表[cs016,cs252]。
os.path.join(path, filename) 使用适当的操作系统分隔符组合路径字符串和文件名字符串(例如,UNIX/Linux系统的/character和Windows的\character)。返回表示文件完整路径的字符串。
import os

def disk_usage(path):
    """Return the number of bytes used by a file/folder and any descendents"""
    total = os.path.getsize(path)
    if os.path.isdir(path):
        for filename in os.listdir(path):
            childpath = os.path.join(path,filename)
            total += disk_usage(childpath)
    print('{0:<7}'.format(total),path)
    return total

The java.io.File Class

new File(pathString) or new File(parentFile, childString) 可以通过将完整路径作为字符串提供或提供表示目录的现有文件实例和指定该目录中子条目名称的字符串来构造新的文件实例。
file.length() 返回由文件实例(例如/user/rt/courses)表示的操作系统条目的即时磁盘使用情况(以字节为单位)。
file.isDirectory( ) 如果文件实例表示目录,则返回true;否则返回false。
file.list( ) 返回指定给定目录中所有项的名称的字符串数组。在我们的示例文件系统中,如果我们对与path/user/rt/courses/cs016关联的文件调用此方法,它将返回一个包含以下内容的数组:“grades”、“homeworks”、“programs”。
import java.io.File;
public class diskUsage {
    /**
     * Calculates the total disk usage (in bytes) of the portion of the file system rooted
     * at the given path, while printing a summary akin to the standard 'du' Unix tool.
     */
    public static long diskUsage(File root){
        long total = root.length();
        if (root.isDirectory()){
            for (String childname:root.list()){
                File child = new File(root,childname);
                total += diskUsage(child);
            }
        }
        System.out.println(total+"\t"+root);
        return total;
    }
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/linshuo1994/article/details/83791187

智能推荐

nginx中获取真实ip_广铁小多多的博客-程序员宝宝

nginx反向代理配置时,一般会添加下面的配置:location / {   proxy_pass http://127.0.0.1:10678;  proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header REMOTE-HOST $r...

POJ 1837 01背包变种_文西的博客-程序员宝宝

题目地址在:http://poj.org/problem?id=1837做这个题目的开始,真的还没有什么思路,即使有人说是01背包,不过依然不知道如何将问题装换成01背包的模型。在比较经典的背包问题中,一般会有一些物品,物品用(Wi, Vi)组成,Wi表示其重量,Vi表示其价值。 然后给一个容量固定的背包,然后选择物品,达到价值最大这个目标。1. 当物品可以分割的时候,贪心算法2.

spark bulkload 到 hbase_卑微的小涛子的博客-程序员宝宝

在使用Spark时经常需要把数据落入HBase中,如果使用普通的Java API,写入会速度很慢。Spark提供了Bulk写入方式的接口。那么Bulk写入与普通写入相比有什么优势呢?BulkLoad不会写WAL,也不会产生flush以及split。如果我们大量调用PUT接口插入数据,可能会导致大量的GC操作。除了影响性能之外,严重时甚至可能会对HBase节点的稳定性造成影响。但是采用Bulk就不会有这个顾虑。过程中没有大量的接口调用消耗性能...

IDEA搭建Springboot+mybatis简单demo_夏至&未至的博客-程序员宝宝

首先Inteliji IDEA是一个较好的开发java项目的IDE,安装使用都很方便,博主之前都是用eclipse的,在公司实习的时候发现启动一个大型的web项目时,eclipse既耗时也容易报错,很是麻烦,所以在熟悉了IDEA的操作后,打算在博客中记录下之前学习的知识,方便后面查看。开始进入主题:1、用IDEA开始搭建一个Springboot项目2、点击next,填写项目包的...

OPENCV320+VS2015+MATLAB2016b混编配置_antanhui2370的博客-程序员宝宝

〇、环境配置win10 64位操作系统OPENCV320仅支持64位MATLAB2016b按装的64位版本VS2015也是64位版本一、MATLAB中的C++编译器查看方法在matlab命令行中输入指令mex –setup可能会出现多个C++编译器的选择,但我的计算机上目前只有一个二、Opencv在MATLAB中的配置方法修改mex...

注册51CTO Blog_weixin_33949359的博客-程序员宝宝

今天申请了一个51CTO博客,记录自己学习Linux的点点滴滴。起了个名字叫“刘亚磊”,以后在运维中的囧事、趣事都会分享到博客里。加油! 转载于:https://blog.51cto.com/laoshuxmao/1275975...

随便推点

codeblocks下载安装以及使用自带GCC / g++编译器_imyyn的博客-程序员宝宝_codeblock g++

codeblocks使用自带GCC / g++编译器(Windows)在官方网站下载安装成功后在官方网站下载选择下载codeblocks-17.12mingw-setup.exe(注意是mingw-setup.exe)安装成功后设置–&amp;amp;amp;amp;gt;编译器–&amp;amp;amp;amp;gt;可执行工具链配置完成...

MongoDB——第六天 分片技术_ATCO的博客-程序员宝宝

在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存就吃不消了,针对这样的场景我们该如何应对。 一:分片     mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案。 下面我对这张图解释一下:     人脸:       代

vpython 贞测碰撞_如何使用Pygame的sprite_collide_mask方法检测碰撞方向?_高步步的博客-程序员宝宝

我认为最好借助物理库Pymunk创建一个台球游戏。开始可能有点困难,但是你不必自己去实现物理。在我这里有一个例子,只是为了演示代码的外观。你必须熟悉图书馆才能了解一切。(用WASD键控制球。)import mathimport pygame as pgimport pymunk as pmfrom pymunk import Vec2ddef flipy(p):"""Convert chipmun...

【观点】程序员必须知道的编程格言_socketwlazly的博客-程序员宝宝

2011-07-01 09:22 | 13721次阅读 | 来源:外刊IT评论 【已有72条评论】发表评论 关键词:编程格言 | 作者:外刊IT评论 | 收藏这篇资讯 导读:本文是从《What are your list of must know progra

系统集成项目管理工程师知识点:如何理解挣值,EV、PV、AC、CPI、SPI_biping6927的博客-程序员宝宝

在系统集成项目管理工程师的考试中,计算题是下午的一道大题,其中经常涉及挣值计算。很多同学对于挣值计算并不理解,只是通过死记硬背公式来计算。虽然进度分析、成本分析涉及的计算往往只是简单的四则运算,但是,如果不能真正理解挣值,往往不能举一反三,则考试的时候如果题目稍微“绕弯”,就可能做不出来。笔者在这里尝试用更通俗的方式解释挣值的内在含义,从而让大家做题时可以真正理解并正确解答。挣值管理是项目管理...

java pdf添加图章_实例讲解Java处理PDF图章的方法_优普艺考的博客-程序员宝宝

图章(印章)是一种在合同、票据、公文等文件中表明法律效应、部门机关权威的重要指示物,常见于各种格式的文件、文档中。对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现。本篇文档分享通过Java代码在PDF文档中添加图章的方法。内容将分两部分介绍:1. 添加图片图章。即通过加载现有的图章(以图片形式),添加到PDF指定页面位置2. 添加动态图章。即加载PDF文档,并在动态的添加印章内...