Python 面试问题:递归

关于递归的 Python 面试问题。

递归算法是一种直接或间接调用自身函数或者方法,直到某个条件(也称为终止条件或基线条件) 匹配的算法。

例如:计算一个数字的阶乘,如果使用循环,代码如下所示:

python 复制代码
def factorial(number):
    j = 1
    if number==0|number==1:
        print(j)
    else:
        for i in range (1, number+1):
            j = j*i
    print(j)
factorial(5)

使用递归算法解决同样的问题:

python 复制代码
def factorial(number):
    j = 1
    if number==0 | number==1:
        return j
    else:
     return number*factorial(number-1)
print(factorial(5))

递归函数使代码看起来很整洁,有助于将复杂的任务分解为更简单的子问题。它比实现迭代更容易。但是,理解递归背后的逻辑可能有点困难。递归会消耗更多的内存和时间,并且很难调试。

问题 1.计算然数之和

编写代码以使用递归计算从 1 到给定数字的自然数之和。

python 复制代码
def mysum(num):
     if num == 0:
         return 0
     else:
         return (num + mysum(num-1))
print(mysum(100)) # 输出:5050

问题 2.以下代码的输出是什么

python 复制代码
def func(x):
    if x%2 == 1:
        return x+1
    else:
        return func(x-1)
print(func(7))
print(func(6))

递归过程解释:

  • 调用func(7),x%2==1成立,返回x+1,·即func(7)输出:8。
  • 调用func(6),x%2==1不成立,,进入else分支,返回func(x-1)。
  • 调用func(6-1),x%2==1成立,返回x+1,即x+1输出:6。

问题 3.以下代码的输出是什么

python 复制代码
def func(x,y):
    if y == 1:
        return x[0]
    else:
        a = func(x, y-1)
        if a>x[y-1]:
            return a
        else:
            return x[y-1]
x = [1,5,3,6,7]
y = 3
print(func(x,y))

递归过程解释:

  • 调用func(x, 3)时:y不等于1,进入else分支。
  • 调用func(x, 2),此时还是y不等于1,进入下一层递归。
  • 调用func(x, 1),此时y等于1,返回x[0],即列表x的第一个元素1。
  • 返回到之前的递归调用层,将1保存在变量a中。
  • 然后将1与x[y-1] = x[1] = 5比较(此时y = 2),由于1小于5,进入else分支,返回x[y-1]=x[1],列表x的第二个元素5。
  • 继续返回到之前的递归调用层,将5保存在变量a中。
  • 然后将5与x[y-1] = x[2] = 3比较(此时y = 3),由于5大于3,返回a的值5。
  • 最终 print(func(x, y)) 输出结果为 5。

问题 4.使用递归编写斐波那契数列

python 复制代码
def fibonacci(num) :
    if num <0:
        print("请输入一个整数。")
    if num == 0:
        return 0
    elif num == 1:
        return 1
    else:
        return fibonacci(num-1) + fibonacci(num-2)
for i in range(10):
     print(fibonacci(i))

问题 5.以下代码的输出是什么

python 复制代码
def func(i, j):
    if i == 0:
        return j;
    else:
        return func(i-1, j+1)
print(func(6,7))

递归过程解释:

  • 调用func(6,7),i == 0不成立,进入else分支,返回func(5,8)。。
  • 继续递归调用返回func(5,8)``func(4,9)``func(3,10)``func(2,11)``func(1,12)。
  • 当调用func(0,13)时,i == 0成立,返回j,即输出:13。

问题 6.以下代码的输出是什么

python 复制代码
def func(k):
    if k <= 0:
        print("请输入一个正数")
    elif k == 1:
        return 0
    else:
        return func(k-1) + 2
print(func(6))

递归过程解释:

  • 调用func(6),进入else分支,返回func(5) + 2。
  • 继续递归调用返回func(4)+2+2``func(3)+2+2+2``func(2)+2+2+2+2。
  • 当调用func(1)+2+2+2+2+2时,0+2+2+2+2+2,即:10。

问题 7.不使用循环输出 1 到 n

python 复制代码
def myprint(n):
    if n > 0:
        myprint(n - 1)
        print(n, end=' ')
n = 10
myprint(n)

问题 8.不使用循环输出 n 到 1

python 复制代码
def myprint(n):
    if n > 0:
        print(n, end=' ')
        myprint(n - 1)
n = 10
myprint(n)

问题 9.使用递归的自然数之和

python 复制代码
def mysum(n):
    if n <= 1:
        return n
    return n+mysum(n - 1)        
n = 100
print(mysum(n))

问题 10.使用递归反转输出字符串

python 复制代码
def reverse(string):
    if len(string) == 0:
        return     
    temp = string[0]
    reverse(string[1:])
    print(temp, end='')
string = "Python"
reverse(string)

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈!

相关推荐
青少儿编程课堂3 分钟前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i4 分钟前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网14 分钟前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术20 分钟前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
怕浪猫35 分钟前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
八解毒剂1 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
老歌老听老掉牙1 小时前
从三维旋转的深度解析到Python实现:绕任意轴旋转的奥秘
python·三维旋转
乐迪信息1 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
FakeOccupational1 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记
打工仔折腾 AI2 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战