2016-08-19 3 views
0

私はスナップ!リスト内の最も早いアイテムを見つけようとする。例えば、リスト[3,1,2]では、 "1"を報告したいと思います。私は解決策が言葉のために働くことを望んでいます(例えば、与えられたリスト[Bob、George、Ari]の報告 "Ari")。リストの中で一番早い商品を報告

私は問題

enter image description here

とソリューションの作品を解決するために再帰を使用しようとしました。しかし、私は2番目のif else文なしで再帰的に行う方法を見つけることができません。 "if 0 = length of ..."ステートメントなしでこの問題を解決するために再帰を使用する方法はありますか?

再生するhere

答えて

0

私は2つのif...else文なしでこれを行う方法はありません。

  1. リストは使い果たされていますか?
  2. 最初の要素は、次のすべての要素未満ですか?

一部の言語では、条件付き3値演算子?:を使用できますが、私はスナップ!それをサポートしています。それはとにかくif...elseのための構文糖だけです。


ただし、この機能ではクリーンアップを行うこともできます。

  1. ゼロ長のリストの場合を明示的に処理することをお勧めします。
  2. 「最も早い」は混乱します。私はあなたが "より小さい"演算子でチェックしているので、 "最小"という言葉をお勧めします。
  3. keep items such that [] from []に複数回電話をかけないでください。これは非効率的であり、誰かが1つの行を変更しても、他の行を変更することを忘れると、バグとなる可能性があります。代わりに、結果をスクリプト変数に保存します。
  4. リスト内のすべての要素と現在の最初の要素を比較しないでください。これは関数にO(n^2)の実行時間を与えます。代わりに、これまでのところ最小の要素としか比較しないでください。これにより、実行時間がO(n)に短縮されます。

これらの変更のいくつかをここに実装されています:

enter image description here

関連する問題