Guest User

Untitled

a guest
May 24th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.91 KB | None | 0 0
  1. /* An implementation of the fast-growing "M" function */
  2.  
  3. #include <stdio.h>
  4.  
  5. /*
  6. An implementation of the hyperoperation sequence (analogous to S0(n)).
  7. */
  8. int hyp(int n, int a, int b) {
  9. if(n == 0) {return b+1;}
  10. else if(n == 1 && b == 0) {return a;}
  11. else if(n == 2 && b == 0) {return 0;}
  12. else if(n >= 3 && b == 0) {return 1;}
  13. else {return hyp(n-1,a,hyp(n,a,b-1));}
  14. }
  15.  
  16. /*
  17. An implementation of the "S" function, with an array input
  18. */
  19. int S(int inputArr[], int n) {
  20. int size = sizeof(inputArr)/sizeof(inputArr[0]);
  21. if(size == 1) {
  22. if(inputArr[0] == 0) {return hyp(n,n,n);}
  23. else {
  24. int counter = 1;
  25. int passArray[]={inputArr[0]-1};
  26. int k = S(passArray,n);
  27. while(counter < n) {
  28. k = S(passArray,k);
  29. counter = counter+1;
  30. }
  31. return k;
  32. }
  33. }
  34. else if(inputArr[size-1] == 0) {
  35. int newArray[size-1];
  36. int f;
  37. for(f = 0; f < size-1; f++) {
  38. newArray[f] = inputArr[f];
  39. }
  40. return S(newArray,n);
  41. }
  42. else {
  43. int newArray[size];
  44. int midArray[size];
  45. int f;
  46. for(f = 0; f < size-2; f++) {
  47. newArray[f] = inputArr[f];
  48. }
  49. for(f = 0; f < size-1; f++) {
  50. midArray[f] = inputArr[f];
  51. }
  52. midArray[size-1] = inputArr[size-1]-1;
  53. newArray[size-1] = inputArr[size-1]-1;
  54. newArray[size-2] = S(midArray,n);
  55. return S(newArray,n);
  56. }
  57. }
  58.  
  59. /*
  60. The "M" function, based on the "S" function defined above
  61. */
  62. int M(int n) {
  63. int callArray[n];
  64. int k;
  65. for(k = 0; k < n; k++) {callArray[k] = n;}
  66. return S(callArray,n);
  67. }
  68.  
  69. int main() {
  70. int n = 0;
  71. int k = M(n);
  72. printf("M(%d) = %dn",n,k);
  73. n = 1;
  74. k = M(n);
  75. printf("M(%d) = ",n);
  76. printf("%dn",k);
  77. n = 2;
  78. printf("M(%d) = ",n);
  79. k = M(n);
  80. printf("%dn",k);
  81. return 0; }
Add Comment
Please, Sign In to add comment