Python面试问题:递归

云课堂学Python 2024-04-13 07:55:18

关于递归的 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)

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

def factorial(number): j = 1 if number==0 | number==1: return j else: return number*factorial(number-1)print(factorial(5))

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

问题 1.计算然数之和

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

def mysum(num): if num == 0: return 0 else: return (num + mysum(num-1))print(mysum(100)) # 输出:5050问题 2.以下代码的输出是什么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.以下代码的输出是什么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 = 3print(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.使用递归编写斐波那契数列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.以下代码的输出是什么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.以下代码的输出是什么def func(k): if k <= 0: print("请输入一个正数") elif k == 1: return 0 else: return func(k-1) + 2print(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 到 ndef myprint(n): if n > 0: myprint(n - 1) print(n, end=' ')n = 10myprint(n)问题 8.不使用循环输出 n 到 1def myprint(n): if n > 0: print(n, end=' ') myprint(n - 1)n = 10myprint(n)问题 9.使用递归的自然数之和def mysum(n): if n <= 1: return n return n+mysum(n - 1) n = 100print(mysum(n))问题 10.使用递归反转输出字符串def reverse(string): if len(string) == 0: return temp = string[0] reverse(string[1:]) print(temp, end='')string = "Python"reverse(string)

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

0 阅读:0

云课堂学Python

简介:感谢大家的关注