【发布时间】:2020-08-18 20:12:27
【问题描述】:
考虑以下代码 sn-p。
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
)
这个函数返回几何级数的第一个num_elements,从start开始,每次乘以multiplier。很容易看出,最后一个元素将通过一个 yield-statement 和 num_elements-1 yield-from-statements 传递。此函数是否具有 O(num_elements) 时间复杂度,还是由于深度为 0、1、2、...、num_elements-2、@987654329 的嵌套 yield-from-statements 的“阶梯”而具有 O(num_elements**2) 时间复杂度@?
编辑:我想出了一个更简单的代码 sn-p 来演示我在问什么。
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 + length of iterable),还是O(depth * length of iterable)?
【问题讨论】:
标签: python yield-from