J'ai écrit une petite fonction récursive destinée à tester si une puissance de b. L'exercice complet de pense python em> est: un nombre, a, est une puissance de B si elle est divisible par B et A / B est une puissance de b. Écrivez une fonction appelée is_power qui prend des paramètres A et B et retourne true si A est une puissance de b. Remarque: vous devrez penser à la base de base. Em> p> existe une manière plus condensée dans laquelle je peux écrire cette fonction? Aussi, est-il approprié d'avoir la fonction se retourner de cette manière? Les fonctions récursives que j'ai vu jusqu'à présent ne semblent pas se rendre eux-mêmes, mais elles s'appellent simplement et rentrent autre chose. Merci p> p>
4 Réponses :
Peut-être juste un peu plus concis: comme pour "une fonction récursive qui se retourne" comme dans cet exemple, c'est une bonne structure et elle s'appelle "Récursion de la queue" . P> La raison pour laquelle il est bon est que certains compilateurs savent comment faire une optimisation de la récursion de la queue qui vous rend le code exécuté plus rapidement et de consommer moins de mémoire qu'une récursive "normale". P> P>
Vous pouvez le faire en une ligne: en général, retourner true code> ou false code> La réponse aux comparaisons est plus verbeuse que de retourner les comparaisons eux-mêmes. Les comparaisons sont déjà values booléennes. P> p>
Je ne fais généralement pas de missions, mais parce que sa connaissance semblait savoir ce que je l'ai donné. Mais voici ce qui se passe, les paramètres des fonctions sont à peu près variables entre la parenthèse, de sorte que lorsque vous tapez la fonction, vous mettriez la valeur des variables entre parenthèses, ce serait donc «IS_Power (2, 4)» définir 2 à la variable A, et définir 4 à la variable b. Maintenant, le retour envoie simplement le résultat à la session. Assurez-vous que les vrais et les faux sont capitalisés, sinon ils penseront qu'ils sont des variables. Mais si vous avez exécuté ce programme comme celui-ci, "IS_Power (2, 4)", après exécution, il imprimerait true sur l'écran car la puissance de 2 est 4.
def is_power(a, b):
power = pow(a)
if power == b:
return True
else:
return False
Quelques problèmes ici: Tout d'abord, la question demande si a code> est une puissance de B code>, votre description semble indiquer le contraire. En outre, le pow () code> fonction en python nécessite au moins deux arguments; Vous avez seulement montré 1. Troisième, il s'agit d'un exercice de récursivité, mais votre réponse n'utilise pas de récursivité. N'hésitez pas à essayer de le corriger!
Pour des raisons d'exhaustivité, vous pouvez utiliser un algorithme plus efficace (et plus verbose) que vous pouvez utiliser.
Notez que pour une constante vous Peut aller plus vite en observant que si B code>, is_pow (A, B) code> prend o (n ^ 2) code> heure où n code> est la taille du bit de A code>. p> a code> est une puissance de B code>, puis des tailles bit de A code> B code> B code> Donnez des informations sur la puissance de B code> qui divise A code> et est proche de sqrt (a) code> en taille. De cette façon, chaque appel récursif réduit le bitsize de A code> à peu près de moitié. P>
La fonction ne "se retourne pas" - il renvoie "le résultat de l'évaluation de lui-même" - ce qui est, bien sûr, quelle récursion signifie précisément! (Sur différents arguments, bien sûr, sinon la récursion ne finirait jamais.)
Le cas de base pourrait être plus basique: si
a == b code>, vous pouvez toujours divisera code> parb code> pour obtenir1 code>, conduisant à un appel récursif deis_power (1, b) code>. (Rien d'autre que 0 à la puissance Zeroth est 1.)