dummy numbers generator in Python

142 Views Asked by At

With an = (an-2 + 1)×an-1 with a0 = 0 and a1 = 1 formula find dummy_numbers(max)

My code:

def dummy_numbers(nums):
    binsize = (((nums - 2) +1) * (nums -1))
    return map(lambda x: int(nums + binsize * x), range(nums))

for num in dummy_numbers(10):
    print(num)

my code prints different result than I expected

1

There are 1 best solutions below

0
On

Use an actual generator with yield to make this easier. The tricky part here is keeping track of an-1 and an-2 as you iterate. This can be achieve like so:

second_last, last = None, None
for current in range(10):
    second_last, last = last, current
assert (second_last, last) == (8, 9)

You also need to hardcode in the constant value that get returned for 0 and 1:

def dummy_numbers(an):
    if an == 0:
        yield 0
    elif an == 1:
        yield 0
        yield 1
    else:
        an_2, an_1 = None, None
        for an_0 in dummy_numbers(an - 1):
            an_2, an_1 = an_1, an_0
            yield an_0
        yield (an_2 + 1) * an_1


for num in dummy_numbers(10):
    print(num)

Outputs:

0
1
1
2
4
12
60
780
47580
37159980
1768109008380

You could also make this non-recursive like so:

def dummy_numbers(an):
    an_2, an_1 = None, None
    for i in range(an):
        if i == 0:
            an_0 = 0
        elif i == 1:
            an_0 = 1
        else:
            an_0 = (an_2 + 1) * an_1

        yield an_0
        an_2, an_1 = an_1, an_0