Showing
3 changed files
with
62 additions
and
2 deletions
... | ... | @@ -68,7 +68,7 @@ fn sqrt() { |
68 | 68 | let f = Fractional(-9, 4); |
69 | 69 | let fr :f64 = f.try_into().unwrap(); |
70 | 70 | let sq = f.sqrt(); |
71 | - let _sq = f64::sqrt(fr); | |
71 | + let _sq = fr.sqrt(); | |
72 | 72 | |
73 | 73 | println!("{:>14} : {:?} / {}", format!("sqrt {}", f), sq, _sq); |
74 | 74 | |
... | ... | @@ -79,7 +79,7 @@ fn sqrt() { |
79 | 79 | let fr :f64 = (*f).try_into().unwrap(); |
80 | 80 | let sq = f.sqrt().unwrap(); |
81 | 81 | let sqr :f64 = sq.try_into().unwrap(); |
82 | - let _sqr = f64::sqrt(fr); | |
82 | + let _sqr = fr.sqrt(); | |
83 | 83 | |
84 | 84 | println!("{:>14} : {} {} / {}", format!("sqrt {}", f), sq, sqr, _sqr); |
85 | 85 | } | ... | ... |
recursion/Cargo.toml
0 → 100644
recursion/src/main.rs
0 → 100644
1 | +// | |
2 | +// Try some recursion with pattern matching... especially in | |
3 | +// conjunction with match to get a similar behavious as in e.g. | |
4 | +// haskell... | |
5 | +// | |
6 | +// Georg Hopp <georg@steffers.org> | |
7 | +// | |
8 | +// Copyright © 2019 Georg Hopp | |
9 | +// | |
10 | +// This program is free software: you can redistribute it and/or modify | |
11 | +// it under the terms of the GNU General Public License as published by | |
12 | +// the Free Software Foundation, either version 3 of the License, or | |
13 | +// (at your option) any later version. | |
14 | +// | |
15 | +// This program is distributed in the hope that it will be useful, | |
16 | +// but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | +// GNU General Public License for more details. | |
19 | +// | |
20 | +// You should have received a copy of the GNU General Public License | |
21 | +// along with this program. If not, see <http://www.gnu.org/licenses/>. | |
22 | +// | |
23 | + | |
24 | +// Borrowing rules do not apply here because everything lives on the stack. | |
25 | +fn faculty(x: u32) -> u32 { | |
26 | + match x { | |
27 | + 0 => 1, | |
28 | + _ => x * faculty(x - 1), | |
29 | + } | |
30 | +} | |
31 | + | |
32 | +// for a tail recursive version we need to pass the currently calculated | |
33 | +// faculty to an inner tail recursive function. | |
34 | +// This will probably be optimized better, because the compiler would be | |
35 | +// able to unroll the complete recursion. | |
36 | +fn tail_faculty(x: u32) -> u32 { | |
37 | + fn faculty(x: u32, f: u32) -> u32 { | |
38 | + match x { | |
39 | + 0 => f, | |
40 | + _ => faculty(x - 1, x * f), | |
41 | + } | |
42 | + }; | |
43 | + faculty(x, 1) | |
44 | +} | |
45 | + | |
46 | +fn main() { | |
47 | + for i in 0..10 { | |
48 | + println!("Fakultät {} = {}", i, faculty(i)); | |
49 | + println!("tail recursive Fakultät {} = {}", i, tail_faculty(i)); | |
50 | + } | |
51 | +} | ... | ... |
Please
register
or
login
to post a comment