Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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)
    ];
  If[IntegerQ[result],result,f[k,result]]
 ];
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

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

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new 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
1  
@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

1 Answer 1

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.