考虑以下代码片段。
该函数返回以
这个函数的时间复杂度是
from typing import Iterable
def geometric_progression(
start: float, multiplier: float, num_elements: int
) -> Iterable[float]:
assert num_elements >= 0
if num_elements > 0:
yield start
yield from geometric_progression(
start * multiplier, multiplier, num_elements - 1
)
该函数返回以
start
为起始点,每次乘以multiplier
的等比数列中的前num_elements
个元素。很容易看出,最后一个元素将通过一个yield
语句和num_elements-1
个yield-from
语句传递。这个函数的时间复杂度是O(num_elements**2)
还是O(num_elements)
?这取决于嵌套了深度为0、1、2......num_elements-2
、num_elements-1
的yield-from
语句的“梯形”结构。
编辑:我已经想出了一个更简单的代码片段来说明我的问题。
from typing import Iterable, Any
def identity_with_nested_yield_from(depth: int, iterable: Iterable[Any]) -> Iterable[Any]:
assert depth >= 1
if depth == 1:
yield from iterable
else:
yield from identity_with_nested_yield_from(depth-1, iterable)
这个函数的时间复杂度是
O(depth + iterable的长度)
还是O(depth * iterable的长度)
?