首页 > 编程语言 >Python面试常见算法题集锦(递归部分)

Python面试常见算法题集锦(递归部分)

时间:2022-12-20 11:13:18浏览次数:42  
标签:台阶 递归 Python digui 2222222 1111111 集锦 return jiecheng

0x1 前言

开始学习python基础的时候,有以下几种算法是面试中常见的,也是前期学习python的时候可以连带学习了解的,不卡门槛哟

0x2 实现算法的方式很多种,而算法的实现也是分程序语言的,此处用python

1.用python写一个简单的递归函数

分析:

递归函数 : 自己调用自己的函数是递归函数
递:去
归:回

触发回的过程有2个条件: 回到上一层函数调用的位置
(1) 当前这层空间函数全部执行结束的时候,触底反弹,触发回的过程
(2) 遇到return 返回值, 直接返回到上一层空间
(3) 递归: 去的过程:就是不停的开辟空间,在回的时候,不停的释放空间,递归函数就是不停的开辟和释放空间的过程
回过程:最后一层空间所有代码执行完毕,会触发回的过程,或者遇到return返回值,也会触发回的过程,回到上一层函数调用的位置

注意事项:
1.递归每一层空间都是独立的个体,独立的副本,资源不共享,可以通过参数或者返回值形成共享
2.递归务必给予跳出的条件,如果递归的层数过深,不推荐使用.容易内存溢出或者蓝屏;

代码:

def digui(n):
    """
    打印1111,2222 是为了使读者看的更清楚 去 回  的两个过程区分
    """
    if n > 0:
        print(n, "1111111")
        digui(n - 1)
    print(n, "2222222")
digui(5)

# 分析
"""
5 1111111
4 1111111
3 1111111   去
2 1111111
1 1111111

0 2222222

1 2222222
2 2222222
3 2222222    回
4 2222222
5 2222222
"""

 

2.求任意数n的阶乘 5! 5x4x3x2x1=?

def jiecheng(n):
    if n <= 1:
        return 1
    return n * jiecheng(n - 1)


res = jiecheng(5)
print(res)

代码解析:

去的过程
n = 5 return n*jiecheng(n-1) => 5*jiecheng(4)
n = 4 return n*jiecheng(n-1) => 4*jiecheng(3)
n = 3 return n*jiecheng(n-1) => 3*jiecheng(2)
n = 2 return n*jiecheng(n-1) => 2*jiecheng(1)
n = 1 return 1

回的过程
n = 2 return n*jiecheng(n-1) => 2*1
n = 3 return n*jiecheng(n-1) => 3*2*1
n = 4 return n*jiecheng(n-1) => 4*3*2*1
n = 5 return n*jiecheng(n-1) => 5*4

3.斐波那契数列: 1,1,2,3,5,8,13,21,34,55 ,… 第n个数字是几?

代码:

def fbnq(n):
    if n == 1 or n == 2:
        return 1
    return fbnq(n - 1) + fbnq(n - 2)


res = fbnq(5)
print(res)

代码解析:

可以转化为斐波那契数列的方式进行求解,假设要跳N阶台阶,那么第一步有两种跳法:
(1)跳一步,后面还有n-1个台阶需要跳;
(2)跳两步,后面还有n-2个台阶需要跳。
可以看到跳n阶台阶的跳法数等于跳n-1和n-2阶台阶数的和,即F(n) = F(n-1) + F(n-2)

4.青蛙跳台阶: 一只青蛙要跳上n层高的台阶,一次能跳一级,也可以跳两级,请问这只青蛙有多少种跳上这个n层高台阶的方法?

代码:

def Frog_JumpSteps_digui(n):
    if n in (1, 2):
        return 1
    return Frog_JumpSteps_digui(n - 1) + Frog_JumpSteps_digui(n - 2)


res = Frog_JumpSteps_digui(2)
print(res)

代码解析:

可以转化为斐波那契数列的方式进行求解,假设要跳N阶台阶,那么第一步有两种跳法:
(1)跳一步,后面还有n-1个台阶需要跳;
(2)跳两步,后面还有n-2个台阶需要跳。
可以看到跳n阶台阶的跳法数等于跳n-1和n-2阶台阶数的和,即F(n) = F(n-1) + F(n-2)

 

标签:台阶,递归,Python,digui,2222222,1111111,集锦,return,jiecheng
From: https://www.cnblogs.com/noproblems/p/16993735.html

相关文章

  • python2.X编码问题梳理
    首先这些问题只有在python2.X版本出现,因为3.X版本中python环境就只有unicode类型的字符串了,即所有程序中处理的都会自动转换成unicode字符串。那么2.X......
  • python抓网页资源小脚本
    #!/usr/bin/envpython#coding:utf-8importurllibdeffilter_src(file_name):resource_list=[]f_obj=open(file_name)forf_lineinf_obj:if'......
  • python中的编解码攻略
    正如其他语言一样,在Python的世界里也有有字符的编解码问题;有的在命令行回显时出现,有的在读取文件时出现,有的在执行命令时出现,有的在读取数据库时出现,不尽相同。注:如未特别申......
  • python PIL图片简单处理
    #!/usr/bin/envpython#-*-coding:utf-8-*-fromPILimportImagef=r'1.jpg'defresize(fn,width=None,height=None):printfnim=Image.open(fn)......
  • python中telnetlib模块的使用
    python下能支持telnet的模块telnetlib是内置模块,直接import就可以了,其基本的使用方法也是比较简单的。 #encoding=utf-8defdo_telnet(Host,username,password,finish,......
  • python模块的打包
    模块安装:需要安装对应版本的setuptools模块,这是一个python的模块打包工具。(可以在pypi上找到)样例代码:新建test.py文件,内容如下:print"showme"新建一个setup.py编译文......
  • python 网站爬虫需要哪些技术?
    对于从事网络爬虫行业的资深技术员来说,正常只要学会下面几点,基本就能够独立完成爬虫任务。学Python爬虫需要学习的八个知识点:1、HTMLHTML被称为超文本标记语言,有着一系......
  • 日志切割: logrotate、python、shell实现
    对于Linux系统安全来说,日志文件是极其重要的工具。不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发......
  • 用Python来写个小型购物车程序
    0x1前言Python语言能做很多东西的,像数据分析啊、自动化、开发、爬虫(真的很棒哟,初学者玩很有成就感的啊哈哈)等等还有挺多。0x2用Python编写的一个小型购物车程序impor......
  • Python__08--运算符
    1常用运算符1.1算数运算符加(+)、减(-)、乘(*)、除(/)、整除(//)取余(%)测试代码:print(-9//-4)print(9//4)print(9//-4)print(-9//4)#一正一负向下取整......