Рекурсивная функция Python для последовательности

#python #recursion #sequence

#python #рекурсия #последовательность

Вопрос:

Как я могу найти n-е число в последовательности: nth = a * q ^ (n-1).

До сих пор я делал это:

     def func(n,a1,q):
        if n == 1:
            return 1
        else:
            return func(a1 * q^(n-1))
 

Я получаю сообщение об ошибке из-за 2 отсутствующих требуемых позиционных аргументов a1 и q. Результат должен возвращать n-й номер последовательности a1 * q ^ (n-1), когда я ее вызываю, «func (3,4,2)» в этом случае будет 16.

Комментарии:

1. Похоже, у вас недостаточно параметров в рекурсивном вызове. Пожалуйста, обновите свой вопрос с полным обратным отслеживанием ошибок.

2.Вы определяете func как функцию из 3 переменных, но a1 * q^(n-1) это всего лишь одно значение, и вы пытаетесь передать это единственное значение func . Возможно, вы намеревались func(a1, q, n-1) ?

3. @ThomasWeller кажется очевидным случаем условия домашнего задания.

4. Я знаю, что это так, но почему-то мне нужно вернуть n-е число, и я не знаю, что ввести в операторе else, чтобы вернуть это n-е число

5. Вы поняли смысл моего первого комментария? 3 и 1 — разные числа. Ваша функция принимает 3 входных данных. a1 * q^(n-1) это всего лишь 1 ввод. Не имеет значения, что вы, как кто-то, кто смотрит на это в коде, можете определить, что это выражение включает в себя 3 ингредиента.

Ответ №1:

Первым членом этой функции является n1 = a * q ^(n-1) = a * q ^(1-1) = a * q ^ 0 = a * 1 = a . Это условие прерывания рекурсии. Код для этого

     if n == 1:
        return a     # You returned 1 here
 

Второй член равен n2 = a * q ^(n-1) = a * q ^(2-1) = a * q ^ 1 = a* q .

Третий член равен n3 = a * q ^(n-1) = a * q ^(3-1) = a * q ^ 2 = a * q * q.

Четвертым слагаемым является n4 = a * q ^(n-1) = a* q ^(4-1) = a* q ^ 3 = a*q* q*q.

Итак, что нужно сделать рекурсии: умножать на q каждый раз. Код для этого:

 return q * func(...)
 

Целая функция:

 def func(n, a, q):
    if n == 1:
        return a
    return q * func(n-1, a, q)
 

Ответ №2:

Я думаю, что это решение вашего вопроса.

 def func(n,a1,q):
    if n == 1:
        return a1
    else:
        return q * func(n-1, a1, q)
 

Ответ №3:

Я не уверен, почему вы ищете рекурсивное решение, если только это не какое-то домашнее задание (в этом случае используйте другие ответы).

Существует прямой способ выразить ваше «n-е число в последовательности»:

 def func(n, a, q):
    return a * q**(n-1)
 

И, если вы ищете всю последовательность (вплоть до заданного значения n ), то:

 import numpy as np

def funcall(n, a, q):
    return a * q**np.arange(n)
 

Пример:

 >>> funcall(10, 4, 2)
array([   4,    8,   16,   32,   64,  128,  256,  512, 1024, 2048])