day16【Pyhton 递归】递归理解

函数的产生可以使代码可以重复使用。

递归的产生可以 使函数重复使用自己,但是python默认递归的深度为1000,这个深度是可以修改的。

自己理解:递归虽然可以重复使用但是,需要设置一个条件,这个条件就是使递归跳出循环的。

def age(n):
    if n == 1:
        return 40
    return age(n-1)+2

递归进行二分查找:

def find(lst,aim):  #这种算法可以在查找的值存在的情况下,不会报错,但是在,查找不    存在的值时,就会报错。
    mid = len(lst)//2
    if aim > lst[mid]:
        find(lst[mid+1:],aim)
    elif aim < lst[mid]:
        find(lst[:mid],aim)
    else:print(aim,mid)
find(ls,66)
#现在的方法可以解决,查找如果不存在的值不报错
def find(lst,aim):
    mid = len(lst)//2
    if mid:
        if aim > lst[mid]:
            find(lst[mid+1:],aim)
        elif aim < lst[mid]:
            find(lst[:mid],aim)
        else:print(aim,mid)
    else:print("你查找的值不存在")
find(ls,66)

时间: 2024-11-10 02:03:20

day16【Pyhton 递归】递归理解的相关文章

对于递归的理解

以下是我对递归的理解如果有不对希望大家指正,谢谢. 附上代码: public class Test { public static void main(String[] args) { // TODO Auto-generated method stub int sum = DiGui(5); System.out.println("mainSum="+sum); } private static int DiGui(int n) { int sum = 0; if(0 == n) {

递归的理解

//十进制的数转化为二进制    public static void toBin(int num){        if(num > 0){            toBin(num/2);            System.out.println(num%2);        }    } 以上面的十进制转化为二进制为例:传参数传入6,把6转化为二进制:使用递归函数不断的调用自身,由于方法在java中是存放到栈中的:在栈中分配空间如下图: 递归总有结束的时候,当if(0>0)的时候结束,

对递推和递归的理解

对递推和递归的理解 1.此问题能否用递推解决 我们以斐波拉契数列问题为例进行阐述,斐波拉契数列为0.1.1.2.3.5.8.13.21.-表现斐波拉契数列为瘦柱状图的形式,如下 我们现在所要解决的问题是求取第n个位置的数值,下面我们正式开始考虑能否用递推解决这个问题(关于递推和递归的区别,将会在下文阐述): 我们考察3号位置,我们发现3号位置的值依赖于1号位置和2号位置,即在1号位置的值和2号位置的值的基础上,我们再进行一些(一个)操作就可以得到3号位置的值.在本例中,这个操作为加法运算. 我们

递归的理解与应用

1.理解递归 递归:是一种应用非常广泛的算法(或编程技巧),DFS深度优先搜索,前中后二叉树遍历等,都有使用到. 2.递归需要满足的三个条件: a.一个问题可以分解为多个子问题 b.该问题与子问题的求解思路完全一致 c.存在递归的终止条件 3.编写递归代码: a.写出推导公式 b.找到终止条件 c.翻译成代码实现 注意: 递归要警惕调堆栈溢出:当调用深度过大,不建议使用递归实现 递归要警惕重复计算:可以将计算过的数据保存起来,下次计算时先查找一下 递归的空间复杂度是O(n) 4.将递归代码改写为

MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!

回到目录 递归递归我爱你!保要你想做,就一定能成功! 从一到二,从二到三,它是容易的,也是没什么搞高的,或者说,它是一种流水线的方式,而从三到十,它注定要有一个质的突破,否则,它会把你累死,代码写的让你自己都觉得想吐!有时,我们是被逼出来的,对于一种功能的实现,我们有时需要有从三到十的态度…… 回归回实例,在mongodb中实体可以嵌套,这在C#里叫做复杂属性,即类中也有类级的属性,这在面向对象里叫做“组合”,它经常在日常开发环境中见到,大家都耳熟能详了,呵呵,而在mongodb里,如果希望对N

关于递归的理解及递归表达式复杂度分析(以求解最大公约数为例)

一,递归的四大基本法则: ①基准情形 基准情形是指那些不需要递归(不需要经过函数调用)之后就能退出的情况.它保证了递归的结束. ②不断推进 每一次递归之后,都要向着基准情形靠近,并且在靠近的过程中问题的规模越来越小. ③设计法则 书上说是:假设所有的递归调用都能运行-----“不是特别理解” ④合成效益法则 不要在不同的递归调用中做重复的工作. 二,实例 求解最大公约数--采用欧几里德算法 1 public static int gcd_recursive(int m, int n){ 2 if

链表算法递归的理解

一:前言 今天在博客园里面看了一篇文章http://www.cnblogs.com/huangxincheng/p/4051854.html(单链表的倒置),其实自己看了一个小时最后那点还是没看明白,自己的不明白在于,递归调用到最后执行递归下面的代码是怎么执行的,如果执行了,执行时的数据从哪来的?我就是这点想不明白,但是我自己能看懂这个代码.此时的想不明白不知道算不算钻牛角尖.还是先说说自己的理解吧!!! 二:我把他的那段代码复制过来了,单链表我自己又随便写个是:9---->6------->

浅谈 PHP递归的理解(递归听起来很高端的词汇 其实就是两次循环)

$data = [ ['pid'=>0,'id'=>1], ['pid'=>1,'id'=>2], ['pid'=>3,'id'=>4], ['pid'=>0,'id'=>3], ]; //对上面的数据进行递归排序(原生的写法) function genCate( $data, $pid = 0) { static $result = array(); foreach ($data as $key => $row) { if ($row['pid']

二叉排序树插入C语言版 递归步骤理解

1 //二叉排序树 插入 (纯C语言实现) 2 BTNode * BSTInsert2(BTNode *bt,int key){ 3 //为什么纯C语言实现中 4 if(bt==NULL){ //要写成 bt->rchild=BSTInsert2(bt->lchild,key); 5 bt = (BTNode*)malloc(sizeof(BTNode)); //而不是直接 BSTInsert2(bt->lchild,key);或者是 6 bt->lchild =bt ->r

递归好理解,可是不好用啊

<!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title></head> <body>    <script>        //递归函数:是在一个函数内通过名字可以调用自身的情况下,就叫做递归函数        //求5!---5*4*3*2*1        //求6!