#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])