- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
printf("sum = %d",numOfSum(4, 5));
}
/**
*
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
共有5个数相加),几个数相加有键盘控制。
f(n) = f(n-1) + aa...a(说明这里有n个a);
*/
int numOfSum(int n,int num){
if (n == 1) {
return num;
}else {
return numOfSum(n-1,num) + n_mum(n,num);
}
}
int n_mum(int n,int num) {
int sum = 0;
while (n>0) {
sum = sum*10+num;
n--;
}
return sum;
}
优化版本
/**
*
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
共有5个数相加),几个数相加有键盘控制。
f(n) = f(n-1) + aa...a(说明这里有n个a);
f(4,2) = f(3,2) + 2222 = f(3,2) + (f(3,2)- f(2,2))*10 + 2;
f(n,k) = f(n-1,k) + (f(n-1,k)-f(n-2,k))*10 + k
*/
// n: n个数字 k:1~9 的数
int test2(int n,int k) {
if (n == 0) {
return 0;
}
if (n == 1) {
return k;
}
return test2(n-1, k) + (test2(n-1, k)-test2(n-2, k))*10 + k;
}