Is it possible to simplify (x == 0 || x == 1) into a single operation?
Since argument is uint
(unsigned) you can put
return (N <= 1) ? 1 : N * fibn(N-1);
Less readable (IMHO) but if you count each character (Code Golf or alike)
return N < 2 ? 1 : N * fibn(N-1);
Edit: for your edited question:
return (N <= 1) ? 1 : fibn(N-1) + fibn(N-2);
Or
return N < 2 ? 1 : fibn(N-1) + fibn(N-2);
There are a number of ways to implement your arithmetic test using bitwise arithmetic. Your expression:
x == 0 || x == 1
is logically equivalent to each one of these:
(x & 1) == x
(x & ~1) == 0
(x | 1) == 1
(~x | 1) == (uint)-1
x >> 1 == 0
Bonus:
x * x == x
(the proof takes a bit of effort)
But practically speaking, these forms are the most readable, and the tiny difference in performance isn't really worth using bitwise arithmetic:
x == 0 || x == 1
x <= 1
(becausex
is an unsigned integer)x < 2
(becausex
is an unsigned integer)