day4-递归

递归

特点

递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归算法解决问题的特点:

(1) 递归就是在过程或函数里调用自身。

(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。

(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

要求

递归算法所体现的“重复”一般有三个要求:

一是每次调用在规模上都有所缩小(通常是减半);

二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);

三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。


1

2

3

4

5

6

7

8

9

def calc(n):            # n 此时等于5

    print(n)            # 打印n的值

    if n < 2:           # 如果 n 的值小于2

        return a        # 返回 a 的值

    elif n/2 > 1:       # 如果 n 除以2 大于 1

        return calc(n/2)# 返回执行本函数,但 n 的值除以了2

bbb = 5

print(calc(bbb)) 打印函数返回的值

来源: http://www.cnblogs.com/alex3714/articles/5143440.html

来自为知笔记(Wiz)

时间: 2024-08-04 08:43:01

day4-递归的相关文章

python小白-day4递归和算法基础

递归&算法基础 一.递归 递归函数的优点是定义简单,逻辑清晰.理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰. 使用递归函数需要注意防止栈溢出.在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧.由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出. 1 2 3 4 5 6 7 8 def calc(n):     print(n)     if n/2>1:         r

day4递归原理及实现

递归 特定: 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题十分有效,它往往是算法的描述简洁而且易于理解. 递归算法解决问题的特点: (1)递归就是在过程或函数里调用自身. (2)在使用递归测略时,必须有一个明确的递归结束条件,称为递归出口. (3)递归算法解题通常显得很简洁,但递归算法解题的效率较低.

day4 递归二分法查找

现有一个序列,data=[for i in range(1,5000,3)],现在要求看一个数是否在列表中存在,我们知道,我们可以使用in或__contains__()的方法,判断一个值是否在列表中,但是列表也是一个一个遍历,看是否与列表中的某个值相等,如果不等则返回False:如果在,则返回True. def binary_search(data,find_n): mid_n = int(len(data)/2) #递归必须有结束条件,这里的结束条件是,当只有两个长度的时候必须结束 if mi

day4 递归原理及解析

递归 递归是一种调用自身的方法,在函数执行过程中重复不断的调用自身的过程,递归的规模每次都要缩小,一般前一步的程序作为后一步的参数.但是必须有递归结束条件. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题十分有效,它往往是算法的描述简洁而且易于理解.     递归算法解决问题的特点: (1)递归就是在 (2)在使用递归测略时,必须有一个明确的递归结束条件,称为递归出口. (3)递归算法解题通常显得很简洁,但递归算法解题的效率较低.所以一般不提倡递归算

python2.0 s12 day4

python2.0 s12 day404 python s12 day4 TengLan回顾上节内容 05 python s12 day4 迭代器原理及使用 本节大纲介绍: 1.迭代器&生成器 2.装饰器 1.基本装饰器 2.多参数装饰器 3.递归 4.算法基础:二分查找 二维数组转换 5.正则表达式 6.常用模块学习 7.作业 1.迭代器&生成器 1)迭代器 定义: 就是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 优点: 不需要事先准备好整

【模板】 递归线段树 [2017年五月计划 清北学堂51精英班Day4]

P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k 操作2: 格式:2 x y 含义:输出区间[x,y]内每个数的

leetcode day4 -- Binary Tree Postorder(Preorder) Traversal &amp;&amp; Edit Distance

 1.Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [3,2,1]. Note: Recursive solution is trivial, could you do it iteratively? 分析:后续遍历

Python之迭代器、生成器、装饰器和递归

一.迭代器&生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头

Python基础篇-day4

本节目录: 1.字符编码 2.函数 2.1参数 2.2变量 2.3返回值 2.4递归 2.5 编程范式 2.6 高阶函数 ************************************************************ 1.字符编码 py2 指定编码时,文件和变量为指定的编码:默认为ASICCpy3 默认文件为utf-8,变量为unicode 只有unicode有encode方法 先说python2 py2里默认编码是ascii文件开头那个编码声明是告诉解释这个代码的程序

协程函数、递归调用

1.消费者生产者模型初级 2.获取指定目录下子目录与文件 3.递归调用 --消费者生产者模型初级 def eater(name): print('%s start to eat' %name ) while True: food = yield print('%s eat %s' %(name,food)) alex_g = eater('alex')#先获得生成器 next(alex_g)#触发函数使函数暂停到函数的yield alex_g.send('骨头')#给yield发送个值,使yie