362再帰関数

読み取りカタログ

ウェッジ

今日の内容の話をする前に、のはそれが何であるかについての話を聞かせて?山一度ありました、山の寺院は寺院が、それが何であるかについて話して、物語を伝える老僧があり、そこでしたか?山一度ありました、山の寺院は寺院が、それが何であるかについて話して、物語を伝える老僧があり、そこでしたか?山一度ありました、山の寺院は寺院が、それが何であるかについて話して、物語を伝える老僧があり、そこでしたか?山一度、寺があった山が、寺は老僧......私は一日に話すことができ、物語をあなたはこの話に停止を命じていないものについて話を持っていました!私たちは、人生の例は、プログラムのように書くことができることを言って、ちょうどこの物語は、あなたがそれを書くか、あなたが書いてみましょうか?

while True:
    story = "
    从前有个山,山里有座庙,庙里老和尚讲故事,
    讲的什么呢?   
    "
    print(story)

あなたは間違いなくそう書き込まれるように持っているが、今は機能を学んだし、どのような関数呼び出しに入るべきことは実行されます。あなたは確かにそれを言うので、私は書きました:

コードをコピー

def story():
    s = """
    从前有个山,山里有座庙,庙里老和尚讲故事,
    讲的什么呢?
    """
    print(s)
    
while True:
    story()

コードをコピー

しかし、私たちは、私が書くかを見てみましょう!

コードをコピー

def story():
    s = """
    从前有个山,山里有座庙,庙里老和尚讲故事,
    讲的什么呢?
    """
    print(s)
    story()
    
story()

コードをコピー

かかわらず、最終的な第一の誤差関数の、エラーに加えて、我々はそれを見ることができ、コードとコードの上記効果の実装のこの部分は同じです。

再帰知人

再帰的定義- * 機能で、その後、この機能自体を呼び出します*

今、私たちはおそらく物語はちょうど機能が何について話して知っていることが、ある機能にして、この機能自体を呼び出す、呼び出される関数を使用するには、この魔法の方法を再帰的に

私たちは、単純な再帰関数を記述する必要がありました。

再帰の最大の深さ--997

あなただけ見てきたように外力が実装されていない場合は、再帰関数がブロックされています。私たちは、関数呼び出しについての質問の前に言ったようしかし、すべての関数呼び出しは、あなたがそれを呼び出すようになっている場合は、ので、この現象のpythonを停止するために、名前空間を作成し、あまりにも多くのメモリの問題を取るだろう、独自の名前のスペースを持っています、でコントロールの再帰的な層を余儀なく997(長い997として!あなたが不利益を購入することはできませんとして、購入...だまされません)。

この「理論上997」は意味あることを証明することは何ですか?ここでは、実験を行うことができます。

IMG

def foo(n):
    print(n)
    n += 1
    foo(n)
foo(1)

このことから、我々は最大数はもちろん997で見ることはできません与えられる前に、997のデフォルト値が設定の私達のメモリを最適化するためのpythonプログラムである、ことを確認することができ、もちろん、我々はまた、いくつかの手段でそれを変更することができます:

IMG

import sys
print(sys.setrecursionlimit(100000))

私たちは、コンピュータの実際の性能に依存して実現することができる深さとして私たちは、Pythonの再帰の深さは10ワットに設定されていることができます、このように再帰の最大の深さを変更することができます。しかし、我々はまだ再帰層997との問題は解決しないのいずれかを使用再帰はどちらかあなたがコードを書く吸う解決するためには適していませんない場合ので、このデフォルトの再帰の深さを変更することはお勧めしません~~~

真簡単にそれを使用しながら、それが優れている、あなたも良いことではありませんどのような再帰を見つけることがあり、ここを参照してください!しかし、このスプレッドは、川や湖にと呼ばれるこの言葉:人々はサイクルを理解し、神は、再帰を理解しています。あなたは過小評価再帰関数ことはできませんので、多くの人々はそれが再帰の本当の意味を理解することができないが、非常に多くの年の偉大な神のしきい値外に停止しています。そして、我々は多くのアルゴリズムと再帰的な関係を検討します。さあ、私は唯一の資本を軽蔑することを学びました!

再帰についての話

ここでは、再帰を行うことができます説明するための例を与える必要があります。

例一:

今、あなたは、アレックスの先生何歳私に尋ねますか?私は、私はあなたを教えていないと述べたが、エゴンよりアレックス2歳年上。

あなたが依頼する必要がどのくらいかを知りたいアレックスはエゴンではないでしょうか?エゴン私は先生、あなたを教えていないが、私は2年が古い争う、と言います。

あなたは呉先生を尋ね、何の先生呉は、彼がJinxinより2歳年上だったと述べ、あなたに言っていません。

その後、ジン新は、彼40 Aことを教え、ジン新をお願いします。

あなたが知っているされていないこの時間?アレックスくらいですか?

1 Jinxin 40
2 呉先生 42
3 そこ 44
4 アレックス 46

なぜあなたは知っていることができますか?

まず第一に、あなたはアレックスの年齢を求めていない、結果はエゴンを見つけ、呉先生、ジン新は、過去にあなたの子供を一つずつ尋ねる決定的な答えを得るためになっている彼らは、最終的なアレックスを取得する前に、そして、この線に沿ってそれを取り戻します年齢の。このプロセスは、再帰の考え方に非常に近くなっています。私たちは、これらの人々の間で具体的な、法律を分析する私に来ます。

age(4) = age(3) + 2 
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 40

このような状況の下で、我々はそれを書く方法の関数であるべきということ?

コードをコピー

def age(n):
    if n == 1:
        return 40
    else:
        return age(n-1)+2

print(age(4))

コードをコピー

再帰関数と3レベルのメニュー

IMG

コードをコピー

menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}

コードをコピー

IMG

コードをコピー

 1 def threeLM(dic):
 2     while True:
 3         for k in dic:print(k)
 4         key = input('input>>').strip()
 5         if key == 'b' or key == 'q':return key
 6         elif key in dic.keys() and dic[key]:
 7             ret = threeLM(dic[key])
 8             if ret == 'q': return 'q'

9 
10 threeLM(menu)

コードをコピー

書面による事前の3つのメニューがそれを仕事覚えていますか?今、私たちは約書き込みに再帰を使用して -

IMG

コードをコピー

l = [menu]
while l:
    for key in l[-1]:print(key)
    k = input('input>>').strip()   # 北京
    if k in l[-1].keys() and l[-1][k]:l.append(l[-1][k])
    elif k == 'b':l.pop()
    elif k == 'q':break

コードをコピー

おすすめ

転載: www.cnblogs.com/jianjie/p/12470753.html