[PYTHON] Essayez de défier le sol par récursif

Bonsoir. J'ai essayé d'être un débutant J'espère que cela sera utile à tout le monde.

Par exemple, comment pouvons-nous atteindre 3! (= 3 * 2 * 1)?

print(3*2*1)

C'est fait (rires)! Alors, pourquoi ne pas l'écrire comme ça en utilisant def?

test.py


def test(n:int=3):
    if n>1:
        return n * test(n-1)
    else:
        return 1

print(test())

Je l'ai essayé à la hâte avec la valeur initiale de 3. Pour le moment, remplaçons-les un par un. Premièrement, lorsque n == 3.

test.py


# n ==Quand 3
def test(n:int=3):
    #n ==3 alors allez à l'intérieur si
    if n>1:
       #return 3 * test(3-1)
        return n * test(n-1)
    else:
        return 1

print(test())

Hourra. Je peux sortir car le retour est arrivé !! 3 * test(2) !? Vous ne pouvez pas terminer sans connaître le test (2). Il n'y a pas moyen. Je ne suis pas sûr, mais considérez n == 2, c'est-à-dire test (2).

test.py


# n ==Quand
def test(n:int=2):
    #n ==2 alors allez à l'intérieur si
    if n>1:
       #return 2 * test(2-1)
        return n * test(n-1)
    else:
        return 1

print(test())

Hmm!? Retourne 2 * test (1) !? Test () apparaît à nouveau, mais cette fois c'est test (1). Cela ne peut pas être aidé, essayons également test (1).

test.py


# n ==Quand 1
def test(n:int=1):
    if n>1:
        return n * test(n-1)
    #n ==Puisqu'il est 1, il va à l'intérieur d'autre
    else:
        #Renvoie 1
        return 1

print(test())

Pour le moment, quand n == 1, c'est return 1, donc J'ai trouvé que la réponse est 1. Je suis content d'avoir enfin rencontré un entier (rires)

Organisons-le une fois. 図1.PNG Après avoir exécuté n == 3 comme indiqué sur la figure, n == 2 est apparu, puis n == 1 est apparu. En tant qu'image, 2 * test (1) est intégré dans test (2), Il semble que 1 * test (0) soit intégré dans test (1).

Ce que nous savons maintenant, c'est que 1 * test (0) est 1 * 1, Autrement dit, c'est juste 1.

Très bien, ignorez une fois le test 3 * (2) Remplaçons 1 * test (0) par le test (1) de 2 * test (1) au centre de la figure ci-dessous. 図2.PNG Puisque 2 * test (1) == 2 * {1 * test (0)}, nous savons que 2 * 1 = 2. Cela signifie. .. .. 図3.PNG 3 * test (2) == 3 * {2 * test (1)} == 3 * {2 * 1}. Avec cela, j'ai réussi à exprimer 3!.

Comme mentionné ci-dessus, lorsqu'un certain événement s'inclut On dit qu'il est récursif.

En utilisant cette idée, non seulement 3! Mais aussi l'échelle de n peut être exprimée, bien sûr. C'est une description simple, mais quand on y pense, c'est compliqué. C'était intéressant, merci pour votre travail acharné (≧ ▽ ≦).

Autres articles
J'ai écrit la pile en Python
Essayez d'implémenter deux piles en Python sur un seul tableau
Valeur minimale pour la pile réalisée avec Python(min)Ajoutez la possibilité de revenir mais de pousser/pop/min est un O basique(1) !!

Recommended Posts

Essayez de défier le sol par récursif
Essayez d'exploiter Facebook avec Python
Essayez de profiler avec ONNX Runtime
Pour faire une récursion avec Python2
Essayez de produire de l'audio avec M5 STACK
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
Essayez de prédire les fleurs de cerisier avec XG Boost
Essayez de convertir en données ordonnées avec les pandas
Essayez rapidement de visualiser votre ensemble de données avec des pandas
Premier YDK à essayer avec Cisco IOS-XE
Essayez de générer une image avec aliénation
Essayez de créer votre propre AWS-SDK avec bash
Essayez d'agréger les données de musique doujin avec des pandas
Essayez de résoudre le diagramme homme-machine avec Python
Essayez d'extraire le document Azure document DB avec pydocumentdb
Essayez de dessiner une courbe de vie avec python
Essayez de communiquer avec EV3 et PC! (MQTT)
Comment essayer l'algorithme des amis d'amis avec pyfof
Essayez de créer un code de "décryptage" en Python
Essayez de générer automatiquement des documents Python avec Sphinx
Essayez de créer un groupe de dièdre avec Python
Essayez de rendre le client FTP le plus rapide avec Pythonista
Essayez de détecter les poissons avec python + OpenCV2.4 (inachevé)
Essayez de gratter avec Python.
Convertir 202003 en 2020-03 avec les pandas
Essayez d'implémenter yolact
Essayez SNN avec BindsNET
Essayez la régression avec TensorFlow
Essayez de résoudre le livre des défis de programmation avec python3
Faisons un outil de veille de commande avec python
Essayez de créer un Checkbutton dynamiquement avec Tkinter en Python
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Essayez de créer une API RESTful avec MVC à l'aide de Flask 1.0.2
Développement basé sur les schémas avec Responder: essayez d'afficher l'interface utilisateur Swagger
Essayez d'obtenir le contenu de Word avec Golang
[Neo4J] ④ Essayez de gérer la structure du graphe avec Cypher
Un échantillon pour essayer rapidement les machines de factorisation avec fastFM
Essayez de falsifier les demandes de l'iPhone avec Burp Suite
Essayez l'optimisation des fonctions avec Optuna
Connectez-vous à BigQuery avec Python
Essayez l'apprentissage en profondeur avec TensorFlow
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
Essayez de jouer avec l'uprobe qui prend directement en charge Systemtap
Essayez d'utiliser PythonTex avec Texpad.
[Evangelion] Essayez de générer automatiquement des lignes de type Asuka avec Deep Learning
Essayez d'afficher diverses informations utiles pour le débogage avec python
Essayez la détection des bords avec OpenCV
Essayez d'implémenter RBM avec chainer.
Essayez d'analyser les tendances Twitter
Essayez Google Mock avec C
Essayez d'utiliser matplotlib avec PyCharm
Essayez de programmer avec un shell!
Essayez de comprendre Python soi