0
votes

Y a-t-il un meilleur moyen d'écrire cette fonction récursive?

J'ai écrit une petite fonction récursive destinée à tester si une puissance de b. L'exercice complet de pense python 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. xxx

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


2 commentaires

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 , vous pouvez toujours diviser a par b pour obtenir 1 , conduisant à un appel récursif de is_power (1, b) . (Rien d'autre que 0 à la puissance Zeroth est 1.)


4 Réponses :


2
votes

Peut-être juste un peu plus concis: xxx

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" .

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".


0 commentaires

4
votes

Vous pouvez le faire en une ligne: xxx

en général, retourner true ou false La réponse aux comparaisons est plus verbeuse que de retourner les comparaisons eux-mêmes. Les comparaisons sont déjà values ​​booléennes.


0 commentaires

-4
votes

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


1 commentaires

Quelques problèmes ici: Tout d'abord, la question demande si a est une puissance de B , votre description semble indiquer le contraire. En outre, le pow () 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!



0
votes

Pour des raisons d'exhaustivité, vous pouvez utiliser un algorithme plus efficace (et plus verbose) que vous pouvez utiliser.

Notez que pour une constante B , is_pow (A, B) prend o (n ^ 2) heure où n est la taille du bit de A .

vous Peut aller plus vite en observant que si a est une puissance de B , puis des tailles bit de A B B Donnez des informations sur la puissance de B qui divise A et est proche de sqrt (a) en taille. De cette façon, chaque appel récursif réduit le bitsize de A à peu près de moitié. xxx


0 commentaires