再帰関数はいつもよくありませんか.

2372 ワード

貴関数にあります。


再帰関数は,一定の条件を満たす前に,自分の関数を絶えず呼び出す.
簡単な例を挙げる.
def factorial(x):
    if x == 1:
        return 1
    else:
        return (x * factorial(x-1))
上の関数は入力数のパラメータを計算する関数です.
このように、関数内部で自分の関数を呼び出し続けることを再帰関数と呼び、いくつかの条件を満たすと、その結果が順番に返されます.

再帰関数はよくありませんか。使えませんか。


私のように悩んでいる人は一人もいません.
検索により、Stack Overflowには答弁するという明瞭なものがあることが分かった.
内容は以下のように要約する.
再帰関数は、実際の操作では使用できない方法ではありません.ただ、一つを選びます.
これは、ツリー構造または同じ論理を繰り返し続ける必要がある場合に便利です.
ただし、オーバーフローが発生する可能性があります.
あまり大きなデータを使わないように注意してください!

実際のサービスで再帰関数を使用した経験


APIで再帰関数を使用する場合は2つの事項を考慮した.
1.このAPIの呼び出しの程度はどのくらい頻繁ですか?
2.この関数で処理されるデータの大きさはどれくらいですか.
再帰関数を使用するAPIは、ホームページのadmin pageメニュー変更機能です.

メニューのデータベース構造は以下の通りです.子供と親の関係はN:1です.
必要な機能は、Json形式で入った新しいメニュー構造を保存することです.
入る仕組みは以下の通りです.

    "menus": [
        {
            "url": "notice",
            "name": "공지사항",
            "children": []
        },
        {
            "url": "board",
            "name": "게시판",
            "children": [
                {
                    "url": "open",
                    "name": "잡담",
                    "children": [
                        {
                            "url": "open1",
                            "name": "잡담 게시판1",
                            "children": []
                        }
                    ]
                }
            ]
        }
    ]
}
メニューの深さは計画によっていつでも3段以上に増やすことができます.
この機能は、再帰関数を使用せずに実現できます.
しかし、再帰関数を使用するとコードがより簡潔になると思います.
上の質問に答えを考えた.
1)APIの呼び出し頻度はどのくらいですか.
  • 管理者はメニューを変更する頻度が低く、
  • 2)この関数が扱うデータの大きさはどれくらいですか.
  • メニューに必要なデータは、id(int)、name(string)、url(string)、parent(int)
  • のデータベースで比較的小さい.
  • メニューはバージョン管理を行わず、新しいメニュー構造を作成する際にメニューを一括削除して保存するため、処理するデータは比較的小さい:
  • .
    上記の回答を考慮すると,再帰関数を用いない理由はない.
    開発チームメンバーと相談した結果、大きな問題はないと結論し、簡単で拡張性のあるAPIを作成しました.

    参考資料:Is再帰a Basdのやり方は普通ですか?stack overflow