python面试题(1)
递归知道吗?简单说说吧
递归是一种算法或编程技术,它是指在解决问题时使用函数自身的调用。简单来说,递归是将一个问题分解成一个或多个与原问题类似但规模较小的子问题来解决的方法。这些子问题会不断地缩小,直到它们变得足够简单,可以直接求解。
递归的关键在于分解和基本情况(也称为递归基):
分解(Divide): 在解决问题时,将问题分解成更小的子问题。每次递归调用时,问题的规模会减小,直到达到基本情况。
基本情况(Base Case): 这是递归的终止条件。当问题变得足够小,可以直接求解时,递归不再继续,而是返回一个确定的值。
在使用递归时,确保每次递归调用都朝着基本情况靠近,以避免无限递归。如果每次递归调用都足够接近基本情况,递归最终会收敛到基本情况并停止。
一个经典的递归例子是计算阶乘。阶乘 n! 的定义是 n! = n * (n-1)!,其中基本情况是 0! = 1 和 1! = 1。
递归在编程中非常有用,但需要小心使用,因为不正确的递归调用可能导致无限循环和性能问题。理解问题如何被分解成更小的子问题以及何时达到基本情况是掌握递归的关键。
快排会吗?写一下?
当然,我可以帮你写一个快速排序算法的示例代码。快速排序是一种常用的排序算法,它的基本思想是通过选择一个基准元素,将数组分成左右两部分,使得左边的元素都小于基准,右边的元素都大于基准,然后递归地对左右两部分进行排序。
以下是一个用 Python 实现的快速排序示例代码:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2] # 选择基准元素
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
# 测试代码
arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_arr = quick_sort(arr)
print(sorted_arr)
在这个示例中,quick_sort
函数接受一个列表 arr
作为输入,然后递归地对左右两部分进行排序,并将排好序的左、中、右三个部分合并起来,最终得到完整的有序数组。这个例子中的基准元素选择方法是取数组中间的元素,实际上也可以选择其他的方法。
请注意,虽然这个示例代码演示了快速排序的基本思想,但在实际应用中,为了避免在最坏情况下的性能问题,可能需要考虑一些优化措施,比如随机选择基准元素,使用三路快排等。
s = "sdsdscdffgdfcsdsdsd", 计算字符串s中c出现的位置和次数
要计算字符串中字符 "c" 出现的位置和次数,你可以使用以下 Python 代码:
s = "sdsdscdffgdfcsdsdsd"
c = "c"
positions = []
count = 0
for i in range(len(s)):
if s[i] == c:
positions.append(i)
count += 1
print("Character 'c' appeared at positions:", positions)
print("Total occurrences:", count)
这段代码会遍历字符串 s
中的每个字符,如果字符等于目标字符 c
,就将其位置添加到 positions
列表中,并增加计数器 count
的值。最后,打印出字符 "c" 的出现位置和总次数。