函数的递归

本人Python小白才刚学不久,如果有什么不对希望指出。这篇文章也是通过Python入门技能树的框架和内容来写的。

递归的定义

递归就是一个定义一个函数,这个函数可以被其他路径下的文件调用也可以被所在文件调用。

例如我们用def来定义一个函数,后面我们再次用到这个函数的时候就可以直接用到这个函数里面的规则

递归的第一个应用(用于数学的阶乘)

结果

input()函数返回的这个数据的类型均为string型,而我们需要的确是一个整数型所以eval就可以很好的解决这个问题

递归的思想与使用方法

递归的思想就是将大规模(解决方法和途径相似)的问题用小规模重复利用

递归的使用方法就是将大规模问题的关系找出来然后用小规模的函数求解

递归的应用

1·字符串的反转

我在敲这一段代码的时候发现了我还没有掌握的地方,就是len(str)==1这里我写成了len(str==1)归根结底就是自己没有掌握列表这里的知识有点忘记了。而str["里面的数字就是字符串里面的字符所占的下标"]

2·斐波那契数列

斐波那契数列在我的理解中就是通过知道前面的两个数字然后来推导后面的数,例如我们知道第一个数字是1,第二个数字也是1,第三个数字就是将第一个数字与第二个数字相加,后面每一个数字都是前面两个之和。这里我其实并没有理解的很深刻。

我在敲代码的时候能理解n是什么但是我就不知道怎么表达1,2返回1,可能多写几次就可以了

优化是从这里来Fu Junzhe_算法与数据结构,Python,计组原理-优快云博客

这个里面是c的思路

这样写入会加大程序的运行时间,减少运行效率比如求n=5时,就要求n=4而4又要求3和2同理这样就会计算多个冗余。如果我们把第二个数字当做第一个数字来计算后面每一项其实是不会变的

例如:

1        2        3        4        5

1        5        6        11        17

我们将第一项先去掉

         1        2        3        4

         5        6        11        17

这一个就大大降低了程序的运行步骤,他就是反复调用下面的那个函数,使他一步一步走向我们想要的值

3·赶鸭子问题

题目描述

一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

分析

设经过的村子为n (n = 0,1,2,...,7),根据题目分析可知递归结束的出口: n = 7时,剩余鸭子数duck = 2;

分析递归体:从后向前推 n=7时 ,duck = 2, 由于每经过一个村子,卖去所赶鸭子的一半又一只,因此七个村子后剩余的鸭子数 duck[7]=duck[6]-(duck[6]/2+1)

反推duck[6] = (duck[7] + 1) * 2

最终递归体: (duck[n+1] + 1) * 2;

综上  

n=7       duck=2
0<=n<7      duck=(duck(n+1) + 1) * 2

分析这里我就copy一下

————————————————
原文链接:https://blog.youkuaiyun.com/W_chuanqi/article/details/123823315

这几串代码我看过也写过3次以上了,每一次都有不同的感悟,这也是我第一次在csdn上面写自己的总结更是将我以前一知半解的内容搞得更加透彻。希望以后会学的更好

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值