Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* An implementation of the fast-growing "M" function */
- #include <stdio.h>
- /*
- An implementation of the hyperoperation sequence (analogous to S0(n)).
- */
- int hyp(int n, int a, int b) {
- if(n == 0) {return b+1;}
- else if(n == 1 && b == 0) {return a;}
- else if(n == 2 && b == 0) {return 0;}
- else if(n >= 3 && b == 0) {return 1;}
- else {return hyp(n-1,a,hyp(n,a,b-1));}
- }
- /*
- An implementation of the "S" function, with an array input
- */
- int S(int inputArr[], int n) {
- int size = sizeof(inputArr)/sizeof(inputArr[0]);
- if(size == 1) {
- if(inputArr[0] == 0) {return hyp(n,n,n);}
- else {
- int counter = 1;
- int passArray[]={inputArr[0]-1};
- int k = S(passArray,n);
- while(counter < n) {
- k = S(passArray,k);
- counter = counter+1;
- }
- return k;
- }
- }
- else if(inputArr[size-1] == 0) {
- int newArray[size-1];
- int f;
- for(f = 0; f < size-1; f++) {
- newArray[f] = inputArr[f];
- }
- return S(newArray,n);
- }
- else {
- int newArray[size];
- int midArray[size];
- int f;
- for(f = 0; f < size-2; f++) {
- newArray[f] = inputArr[f];
- }
- for(f = 0; f < size-1; f++) {
- midArray[f] = inputArr[f];
- }
- midArray[size-1] = inputArr[size-1]-1;
- newArray[size-1] = inputArr[size-1]-1;
- newArray[size-2] = S(midArray,n);
- return S(newArray,n);
- }
- }
- /*
- The "M" function, based on the "S" function defined above
- */
- int M(int n) {
- int callArray[n];
- int k;
- for(k = 0; k < n; k++) {callArray[k] = n;}
- return S(callArray,n);
- }
- int main() {
- int n = 0;
- int k = M(n);
- printf("M(%d) = %dn",n,k);
- n = 1;
- k = M(n);
- printf("M(%d) = ",n);
- printf("%dn",k);
- n = 2;
- printf("M(%d) = ",n);
- k = M(n);
- printf("%dn",k);
- return 0; }
Add Comment
Please, Sign In to add comment