ホームページ > バックエンド開発 > PHPチュートリアル > 赤いエンベロープ生成アルゴリズムを自分で書きましたが、正しく生成できますが、再帰的に生成することはできません。

赤いエンベロープ生成アルゴリズムを自分で書きましたが、正しく生成できますが、再帰的に生成することはできません。

WBOY
リリース: 2016-07-06 13:52:36
オリジナル
869 人が閲覧しました

ランダムな赤い封筒を生成する必要があるため、配布する赤い封筒の量、最小値、最大値、数量を設定する必要があります。

for ループを使おうとしましたが、do while で行き詰まってしまったので、再帰を使用してループを書きました。正しい赤いエンベロープはメモリ内で生成できますが、再帰はできません。問題がどこにあるのかを見つけるのを手伝ってください。

リーリー

返信内容:

ランダムな赤い封筒を生成する必要があるため、配布する赤い封筒の金額、最小値、最大値、数量を設定する必要があります。

for ループを使おうとしましたが、do while で行き詰まってしまったので、再帰を使用してループを書きました。正しい赤いエンベロープはメモリ内で生成できますが、再帰はできません。問題がどこにあるのかを見つけるのを手伝ってください。

リーリー

あなたが与えてくれたものに従って変更しました:

リーリー

再帰を使用しており、運に基づいてランダムであるため、スタック オーバーフローが発生しやすいことに注意してください。

データ luckymoney(80、1.3、2、50) をテストしましたが、5 回中 2 回は成功しました。アルゴリズムを変更することをお勧めします...

return hongbao($money, $min, $max, $num, $arr, 'no');

皆さん、ありがとうございます。アルゴリズムを改善するために for ループを再利用しました。
200元を送ることを基準に、最小1.3、最大3、赤い封筒200枚を送ることによって計算

for ループ アルゴリズムを使用すると、関数は 100 回実行され、平均実行時間は 0.004 秒です。
再帰アルゴリズムを使用すると、関数は 100 回実行され、平均実行時間は 0.211 秒です。

上記のコードの効率の差は 52.75 倍です。@aristotll さん、ご提案ありがとうございます。

以下は for ループのコードです。もっと良いアイデアがあれば、ご指導ください。ありがとうございます。 リーリー

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート