Skip to content

Instantly share code, notes, and snippets.

@javascripter
Created May 16, 2014 12:45
Show Gist options
  • Save javascripter/d376c9a4f22a947c5ff8 to your computer and use it in GitHub Desktop.
Save javascripter/d376c9a4f22a947c5ff8 to your computer and use it in GitHub Desktop.
a step by step execution with generators
function* gcd(a, b) {
[a, b]
if (a < b) {
var t = a;
a = b;
b = t;
}
do {
r = a % b;
yield {a: a, b: b, r: r};
a = b;
b = r;
} while (r != 0);
return a; // b was replaced by r in the last loop so this has to be a
}
var g = gcd(4321432142321, 98723431654321);
for (var i = 0; i < 100; i++) { // to avoid infinite loop cause by invalid arguments such as non-integers...
var v = g.next();
if (v.done) {
console.log(v.value);
break;
}
console.log(v.value);
}
/* output:
{ a: 98723431654321, b: 4321432142321, r: 3651924523259 }
{ a: 4321432142321, b: 3651924523259, r: 669507619062 }
{ a: 3651924523259, b: 669507619062, r: 304386427949 }
{ a: 669507619062, b: 304386427949, r: 60734763164 }
{ a: 304386427949, b: 60734763164, r: 712612129 }
{ a: 60734763164, b: 712612129, r: 162732199 }
{ a: 712612129, b: 162732199, r: 61683333 }
{ a: 162732199, b: 61683333, r: 39365533 }
{ a: 61683333, b: 39365533, r: 22317800 }
{ a: 39365533, b: 22317800, r: 17047733 }
{ a: 22317800, b: 17047733, r: 5270067 }
{ a: 17047733, b: 5270067, r: 1237532 }
{ a: 5270067, b: 1237532, r: 319939 }
{ a: 1237532, b: 319939, r: 277715 }
{ a: 319939, b: 277715, r: 42224 }
{ a: 277715, b: 42224, r: 24371 }
{ a: 42224, b: 24371, r: 17853 }
{ a: 24371, b: 17853, r: 6518 }
{ a: 17853, b: 6518, r: 4817 }
{ a: 6518, b: 4817, r: 1701 }
{ a: 4817, b: 1701, r: 1415 }
{ a: 1701, b: 1415, r: 286 }
{ a: 1415, b: 286, r: 271 }
{ a: 286, b: 271, r: 15 }
{ a: 271, b: 15, r: 1 }
{ a: 15, b: 1, r: 0 }
1
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment