В настоящее время я пытаюсь обернуть голову изучением Python, и я пришел к тому, чтобы немного отдохнуть на рекурсивных функциях. В Think Python, одно из упражнений, чтобы написать функцию, которая определяет, является ли число является степенью числа б используя следующее определение:Почему моя рекурсивная функция возвращает None?
«число, а, является сила Ь, если он делится на b и a/b является степенью b. Напишите функцию, называемую is_power, которая принимает параметры a и b и возвращает True, если a является степенью b. "
Текущее состояние моей функции:
def isPower(a,b):
return a % b == 0 and (a/b) % b == 0
print isPower(num1,num2)
Как это, это дает результат я ожидаю. Однако глава сосредоточена на написании рекурсивных функций для уменьшения избыточности, и я не совсем уверен, как я могу превратить окончательный «(a/b)% b == 0» в рекурсию. Я попытался:
def isPower(a,b):
if a % b != 0:
return False
elif isPower((a/b),b):
return True
Но это просто возвращает Нет.
Каков правильный способ рекурсии этой функции?
вы должны учитывать, что значение оператора «/» изменилось в Python 3+, от возвращения целого числа к возврату float, поэтому ваш код сломается. Вместо этого измените его на '//', который всегда будет возвращать int. –
Обратите внимание, что ваша первая попытка не проверяет, является ли a степенью b, она говорит, если a кратно b^2. try isPower (12,2), он вернет True. – Javier
Просто так сказано, ваша первая версия isPower сломана - она покажет только, является ли 'a' кратным' b^2'. Он вернет true для 'isPower (2, 1)', например, который никогда не должен быть правдой. В этом случае вы можете захотеть убедиться, что любая рекурсивная версия проверяет, будет ли '(b == 1 && a! = 1)' до ее продолжения, или она либо застрянет в бесконечном цикле, либо вернет неправильную вещь. – cHao