int test_ex_1_1_18(int argc, const char * argv[]) { int a = 2, b = 25, m = 3, n = 11;; printf("%d\n", mystery(a, b)); printf("%d\n", mystery(m, n)); printf("%d\n", mystery2(a, b)); printf("%d\n", mystery2(m, n)); return 0; }
/* a的倍数增加方式(偶数时增加一倍,奇数时增加一倍,再加1),类似于b的递减(偶数时减少一半,奇数时减1后,再减少一半),所以最终mystery(a, b) = a * b */ int mystery(int a, int b) { if (b == 0) { return 0; } if (b % 2 == 0) { return mystery(a + a, b / 2); } return mystery(a + a, b / 2) + a; }
/* multiplies a for b times recursively */ int mystery(int a, int b) { if(b == -1) return -a; else if(b == 1) return a; else { if(b > 1) return a + mystery(a, b - 1); else return -a + mystery(a, b + 1); } } /* eof mystery() */
int main() { int x, y; printf("Enter two integers: "); scanf("%d%d", &x, &y); printf("The result is %d\n", mystery(x, y)); return 0; } /* E0F main */
int main() { /* sample run */ unsigned int n = 305419896; unsigned char c = 171; printf("sizeof(unsigned int) = %lu \n\n", sizeof(unsigned int)); printf("sizeof(unsigned char) = %lu \n\n", sizeof(unsigned char)); unsigned result = mystery(n, 2, c); printf("%u ===> %u\n", n, result); return 0; }
int main() { mystery(); }