fn recursive_binary_search<T: Ord>(list: &mut [T], target: T) -> bool {
if list.len() < 1 {
return false;
}
let guess = list.len()/2;
if target == list[guess] {
return true;
} else if list[guess] > target {
return recursive_binary_search(&mut list[0..guess], target);
} else if list[guess] < target {
return recursive_binary_search(&mut list[guess..list.len()], target);
}
}
場合、コンパイラは、私は型チェッカーを満たすために、この機能を書き換える方法を見つけ出すことはできません再帰関数錆
src/main.rs:33:5: 39:6 error: mismatched types [E0308]
src/main.rs:33 if target == list[guess] {
^
src/main.rs:33:5: 39:6 help: run `rustc --explain E0308` to see a detailed explanation
src/main.rs:33:5: 39:6 note: expected type `bool`
src/main.rs:33:5: 39:6 note: found type `()`
error: aborting due to previous error
を言っif target == list[guess]
にエラーがスローされます。戻り値の型がboolに設定されており、戻り値の関数呼び出しがあるので、それは仮定していますか?
Eq形質は不要ですか? OrdはPartialOrd + Eqを含む。もちろん、これは学習目的に過ぎません。 – leshow
@leshow yep;私はそれを考えずにそれをコピーした。最後のバージョンで削除され、無限再帰バグも修正されます。 – Shepmaster
マッチしたチップのおかげで、それはそれを書くのに良いいいね。 – leshow