Take the 2-minute tour ×

This question already has an answer here:

I'm relatively new to Mathematica, and I'm trying to define a function f(k) that would do the following:

For any positive integer $k$, a finite sequence $a_i$ of fractions $\frac{x_i}{y_i}$ is defined by: $$a_1 = \frac{1}{k}\\ a_i = \frac{x_{i-1}+1}{y_{i-1}-1}$$ When $a_i$ reaches some integer $n$, the sequence stops. (That is, when $y_i=1$.) Define $f(k) = n$.

-- Project Euler

I have the following function written:

f[k_, sofar_] = Module[{num, result},
  result =
   If[sofar == 0,1/k,((num = Numerator[sofar]) + 1)/(num/sofar - 1)
f[k_] = f[k, 0]

But I get the result {ComplexInfinity,List} and I don't understand why. What am I doing wrong?

share|improve this question
Your function needs to depend on both $x_{i-1}$ and $y_{i-1}$. (This answer applies to any programming language you might choose for tackling this problem.) –  whuber Mar 7 '13 at 23:08
I rephrased the format of the question from Project Euler. The fraction is reduced before the function is re-applied. –  Jakob Weisblat Mar 7 '13 at 23:09
Yep, but you still need to track the numerator and denominator, so you might as well do so explicitly--at least conceptually. Your life will be much easier. (Mathematica can handle many of the details, but under the hood it will be doing exactly the same thing: carrying an ordered pair of (numerator, denominator) around.) –  whuber Mar 7 '13 at 23:10
so I pass $x_i/y_i$ as $sofar$ and then determine the new numerator, then $\frac{num}{sofar}$ is $y_i$ –  Jakob Weisblat Mar 7 '13 at 23:11
@whuber After completely changing my code such that it works in the way you suggested, the problem goes away. Huh. Thanks. –  Jakob Weisblat Mar 7 '13 at 23:26
show 4 more comments

marked as duplicate by Jens, rm -rf Apr 27 '13 at 20:53


1 Answer

The solution to this problem is to use := instead of = with the function definition so that it is not evaluated immediately.

share|improve this answer
add comment
