Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. function getCallStackSize() {
  2. var count = 0, fn = arguments.callee;
  3. while ( (fn = fn.caller) ) {
  4. count++;
  5. }
  6. return count;
  7. }
  8.  
  9. function f() { g(); }
  10. function g() { h(); }
  11. function h() { alert(getCallStackSize()); }
  12.  
  13. f(); // Alerts 3
  14.  
  15. var arrayContains = Array.prototype.indexOf ?
  16. function(arr, val) {
  17. return arr.indexOf(val) > -1;
  18. } :
  19. function(arr, val) {
  20. for (var i = 0, len = arr.length; i < len; ++i) {
  21. if (arr[i] === val) {
  22. return true;
  23. }
  24. }
  25. return false;
  26. };
  27.  
  28. function getCallStackSize() {
  29. var count = 0, fn = arguments.callee, functionsSeen = [fn];
  30.  
  31. while ( (fn = fn.caller) && !arrayContains(functionsSeen, fn) ) {
  32. functionsSeen.push(fn);
  33. count++;
  34. }
  35.  
  36. return count;
  37. }
  38.  
  39. var trace = printStackTrace();
  40. console.log(trace.length());
  41.  
  42. function getRemainingStackSize()
  43. {
  44. var i = 0;
  45. function stackSizeExplorer() {
  46. i++;
  47. stackSizeExplorer();
  48. }
  49.  
  50. try {
  51. stackSizeExplorer();
  52. } catch (e) {
  53. return i;
  54. }
  55. }
  56.  
  57. var baselineRemStackSize = getRemainingStackSize();
  58. var largestSeenStackSize = 0;
  59.  
  60. function getStackSize()
  61. {
  62. var sz = baselineRemStackSize - getRemainingStackSize();
  63. if (largestSeenStackSize < sz)
  64. largestSeenStackSize = sz;
  65. return sz;
  66. }
  67.  
  68. function ackermann(m, n)
  69. {
  70. if (m == 0) {
  71. console.log("Stack Size: " + getStackSize());
  72. return n + 1;
  73. }
  74.  
  75. if (n == 0)
  76. return ackermann(m - 1, 1);
  77.  
  78. return ackermann(m - 1, ackermann(m, n-1));
  79. }
  80.  
  81. function main()
  82. {
  83. var m, n;
  84.  
  85. for (var m = 0; m < 4; m++)
  86. for (var n = 0; n < 5; n++)
  87. console.log("A(" + m + ", " + n + ") = " + ackermann(m, n));
  88. console.log("Deepest recursion: " + largestSeenStackSize + " (" +
  89. (baselineRemStackSize-largestSeenStackSize) + " left)");
  90. }
  91.  
  92. main();
  93.  
  94. var maxStackSize = function(i){try{(function m(){++i&&m()}())}catch(e){return i}}(0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement