递归调用

python中函数高级

匿名 (未验证) 提交于 2019-12-02 22:51:30
python中函数的高级用法 一、引用传递(传地址) 引用传递,实质是在传递内存地址,因此函数中改变参数值,在函数外参数值仍会发生变化 二、递归 指在函数的定义中使用函数自身的方法。 在使用递归时,需要注意以下几点: 递归就是在过程或函数里调用自身。 必须有一个明确的递归终止条件,称为递归出口,否则函数会陷入死循环。 三、函数默认值 在 python ,可以为函数的参数给予默认值 一旦某个存在默认值,那么如果在调用的时候,不传递这个参数,则按照默认值,减少调用时的繁杂操作 注意:在定义函数时,如果存在有默认值的参数,一定要写在没有默认值的参数后面,否则在调用时 无法确定参数到底传给哪个参数。 四、全局变量与局部变量 1 、局部变量 : 局部变量,就是在函数内部定义的变量不同的函数,可以定义相同的名字的局部变量,但是各用 个的,不会产生影响 局部变量的作用,为了临时保存数据,需要在函数中定义变量来进行存储 这就是它的作用 。 2 、全局变量 : 如果一个变量,即能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量 。 3 、全局变量和局部变量名字相同的问题: 在函数外边定义的变量叫做全局变量 全局变量能够在所有的函数中进行 如果在函数中修改全局变量,那么就需要使用 global ,否则出错 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量。 4 、注意

Python尾递归优化

匿名 (未验证) 提交于 2019-12-02 22:51:30
Python开启尾递归优化 cpython本身不支持尾递归优化, 但是一个牛人想出的解决办法: 实现一个 tail_call_optimized 装饰器 #!/usr/bin/env python2.4 # This program shows off a python decorator( # which implements tail call optimization. It # does this by throwing an exception if it is # it's own grandparent, and catching such # exceptions to recall the stack. import sys class TailRecurseException: def __init__(self, args, kwargs): self.args = args self.kwargs = kwargs def tail_call_optimized(g): """ This function decorates a function with tail call optimization. It does this by throwing an exception if it is it's own grandparent, and

python---递归函数

痴心易碎 提交于 2019-12-02 22:18:37
1、递归函数:函数调用填本身 #n! def digui(n): if n==0: return 1 return n * digui(n-1) m = digui(3) print(m) 控制台输出:6 2、举个例子--斐波那契函数 def fib(n): if n == 0: return 0 elif n == 1: return 1 else: return fib(n-1) + fib(n-2) n = fib(10) print(n) 控制台输出:55 3、详细说明   a:把问题分成更小子问题,此处将 abcdef,分为 a 和 bcdef   b:有一个函数可以应用在所有的子问题上 str[ 1:]+str[ 0 ]   c:把子问题的解,拼成最终问题的解,即递归的部分。 return fanzhuan(str[ 1:])+str[ 0]   d:子问题到最低层时该返回什么值,即什么时候停止递归。下面的 if 条件 str1 = 'abcdef' def fanzhuan(str): if len(str) == 1: return str return fanzhuan(str[1:])+str[0] str2 = fanzhuan(str1) print(str2) 控制台输出:fedcba 4、本文参考博文:https://blog.csdn.net

Python函数初识二

匿名 (未验证) 提交于 2019-12-02 22:11:45
在Python中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。 在Python程序中创建、改变、查找变量名时,都是在一个保存变量名的空间中进行,我们称之为命名空间,也被称之为作用域。python的作用域是静态的,在源代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。 在Python中并不是所有的语句块中都会产生作用域。 只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。 举个栗子: def greet_people(): name = 'jack' print("Hello, "+name) # 在函数内打印变量 print(name) # 在函数外打印变量 ===》 直接出错 greet_people() 上述代码的运行结果为: C:\Python37\python3.exe D:/pythoncode/Exercise/Exer8/Exer8-13.py Traceback (most recent call last): File "D:/pythoncode/Exercise/Exer8/Exer8-13.py", line 5, in <module> print(name

递归与二分法

匿名 (未验证) 提交于 2019-12-02 22:11:45
递归 自己调用自己 递归的入口(参数)和出口(return) 树状结构的遍历 import os def func(lujing, n): # "d:/a/" lst = os.listdir(lujing) # 打开文件夹. 列出该文件夹内的所有文件名 for el in lst: # el是文件的名字. b, c path = os.path.join(lujing, el) # 还原文件路径"d:/a/b" if os.path.isdir(path): # 判断路径是否是文件夹 print("..." * n,el) # 显示文件夹的名字 func(path, n + 1) # 在来一次 else: print("\t" * n,el) # 显示文件 func("d:/a", 0) 二分法 掐头结尾取中间 查找效率非常的高 不使用递归进行二分法 lst = [1,3,5,7,12,36,68,79,132,345,567] n = int(input("请输入一个数")) left = 0 right = len(lst) - 1 while left <= right: mid = (left + right)//2 if n > lst[mid]: left = mid + 1 elif n < lst[mid]: right = mid - 1 else: print

课时22:函数:递归是神马

匿名 (未验证) 提交于 2019-12-02 22:11:45
目录:   一、递归是“神马”?   二、写一个求阶乘的函数   三、课时22课后习题及答案 ********************* 一、递归是“神马”? ********************* 递归这个概念,是算法的范畴。那么递归算法在日常编程中有哪些例子呢?             图片一 汉诺塔游戏             图片二 树结构的定义             图片三 谢尔宾斯基三角形             图片四 女神自拍 递归,从原理上来说就是函数调用自身的一个行为。你没听错,在函数内部,你可以调用所有可见的函数,当然包括自己。 举个例子: >>> def recursion(): return recursion() >>> recursion() Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> recursion() File "<pyshell#2>", line 2, in recursion return recursion() File "<pyshell#2>", line 2, in recursion return recursion() File "<pyshell#2>", line 2, in recursion return

PHP无限极分类原理

匿名 (未验证) 提交于 2019-12-02 22:10:10
1.递归:程序调用自身的编程技巧称为递归 2.案例: /** * @param 递归 $[name] */ function deeploop(&$i=1){ echo $i; $i++; if($i < 10){ deeploop($i); } } deeploop(); 结果:123456789 3.global /** * @param 递归 $[name] */ $i = 1; function deeploop(){ global $i; //Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。 echo $i; $i++; if($i < 10){ deeploop($i); } } deeploop(); 4.static /** * @param 递归 $[name] */ function deeploop(){ static $i; echo $i; $i++; if($i < 10){ deeploop($i); } } deeploop(); 5.说白了递归就是一个循环,用循环实现和递归实现是同样的效果。 /** * @param 递归 $[name] */ for($i=1;$i<10;$i++){ echo $i; } function deeploop(){

c#递归理解

匿名 (未验证) 提交于 2019-12-02 22:06:11
什么是递归函数? 任何一个方法既可以调用其他方法又可以调用自己,而当这个方法调用自己时,我们就叫它递归函数或者递归方法! 说白了,就是调用自己。 1.递归方法一直会调用自己直到某些条件满足,也就是说一定要有出口; 2.递归方法会有一些参数,而它会把这些新的参数值传递给自己;(自己调自己); 个人理解: 1,需要设定一个边界,也就是什么时间结束。 2,需要递归的逻辑,也就是递归的公式 举个例子: 1.阶乘 阶乘(!)是小于某个数的所有正整数的乘积; f(n)=n*(n-1) 首先,我们先确认边界是什么? 其次,我们要知道逻辑是什么? 边界:当n=1时,他的阶乘就是1,也就是结束的时候 逻辑:上面其实已经给出来了 就是f(n)=n*(n-1) 好,那我们现在用程序来实现 2.(Fibonacci)斐波拉切数列: Fibonacci数列是按以下顺序排列的数字: 1,1,2,3,5,8,13,21,34,55.... 我们不难发现数列的排列规律是:后一个数加上前一个数,以此类推; 然后我们来确认2个点 1,边界:你可以发现 当n == 0 n ==1 时就可以触发边界 下面是计算Fabonacci数列的一种实现方法 总结:方法实现体内再次调用方法本身的本质是多个方法的简写;    它既可以调用其他方法,又可以调用自身.    递归一定要有出口; 文章来源: c#递归理解

小猿圈之MySql递归查询

匿名 (未验证) 提交于 2019-12-02 22:02:20
不管学习什么语言,python、java、php等等如果你以后的方向是web,那么你都离不开数据库,mysql数据库又是开源的,所以是最受欢迎的数据库,也是企业用的最多的数据库, 小猿圈老师 详解mysql的递归查询,不懂的同学可以看过来了。 一、递归语句 -- 向下递归函数 设置某个部门下的所有子部门为无效: update bi_dept set zt ='0' WHERE FIND_IN_SET(fr_pk_dept,'部门ID')>0; 二、自定义递归函数 利用find_in_set()函数和group_concat()函数实现递归查询:、 1、向下递归: 调用方式: SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfo(4)); 实例: DROP FUNCTION IF EXISTS queryChildrenAreaInfo; CREATE FUNCTION queryChildrenAreaInfo(areaId INT) -- 或者 areaId char RETURNS VARCHAR(4000) BEGIN DECLARE sTemp VARCHAR(4000); DECLARE sTempChd VARCHAR(4000); SET sTemp='$'; SET sTempChd

小猿圈之MySql递归查询

匿名 (未验证) 提交于 2019-12-02 22:02:20
不管学习什么语言,python、java、php等等如果你以后的方向是web,那么你都离不开数据库,mysql数据库又是开源的,所以是最受欢迎的数据库,也是企业用的最多的数据库, 小猿圈老师 详解mysql的递归查询,不懂的同学可以看过来了。 一、递归语句 -- 向下递归函数 SELECT GROUP_CONCAT('''', pk_dept , '''') FROM rzzxdb.bi_dept WHERE FIND_IN_SET(fr_pk_dept,'1070')>0; 设置某个部门下的所有子部门为无效: update bi_dept set zt ='0' WHERE FIND_IN_SET(fr_pk_dept,'部门ID')>0; 二、自定义递归函数 利用find_in_set()函数和group_concat()函数实现递归查询:、 1、向下递归: 调用方式: SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfo(4)); 实例: DROP FUNCTION IF EXISTS queryChildrenAreaInfo; CREATE FUNCTION queryChildrenAreaInfo(areaId INT) -- 或者 areaId char RETURNS VARCHAR