您的位置:首页 > 其它

递归3_计算多个数字

2016-03-31 14:03 381 查看
- (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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归