递归3_计算多个数字

来源:互联网 发布:游戏数据修改器 编辑:程序博客网 时间:2024/06/05 10:59
- (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;}
0 0