1+11+111+1111+.....用递归算法怎么做

解决方案 »

  1.   

    这么有发一个 唉我贴的都累了 sum = 1;
    for(int i =1;i<n;i++){ // n 1+11+...个数
    sum += sum*11 +1;//sum += sum + sum*10 + 1;
    }
      

  2.   

    int foo(int i)
    {
         if (i == 1)  return 1;
         else return 10^i*1/10+foo(i-1);
    }
      

  3.   


    import java.math.*;
    public class Jisuan {
    public static int fun(int n)
    {
    if(n == 1)
    return 1;
    else
    return  (int) ((Math.pow(10, n)-1)/9+ fun(n-1));
    }
    public static void main(String args[])
    {
    int result = fun(8);
    System.out.println(result);
    }}
      

  4.   

    ((Math.pow(10, n)-1)/9  数列的通项
      

  5.   

    code=Java]public class RecursionV1 {
    public int recursion(int n) {
    if(n != 1) {
    int sum = 0;
    int tmp = 0;
    tmp = n/10;
    sum = recursion(tmp);
    sum = n + sum;
    return sum;
    }
    else return 1;
    }

    public static void main(String[] args) {
    RecursionV1 rv = new RecursionV1();
    System.out.println(rv.recursion(1111));
    }
    }[/code]
      

  6.   

    没发好,重发public class RecursionV1 {
    public int recursion(int n) {
    if(n != 1) {
    int sum = 0;
    int tmp = 0;
    tmp = n/10;
    sum = recursion(tmp);
    sum = n + sum;
    return sum;
    }
    else return 1;
    }

    public static void main(String[] args) {
    RecursionV1 rv = new RecursionV1();
    System.out.println(rv.recursion(1111));
    }
    }
      

  7.   

    public static int go(int n) {
    double t = 0;
    for (int i = 1; i <= n; i++) {
    t += Math.pow(10, i - 1);
    }
    if (t == 1) {
    return 1;
    } else {
    return (int) (t + go(n - 1));
    }
    } public static void main(String[] args) {
    System.out.println(T.go(2));
    }
      

  8.   

    int s=0,i=1;;sum(int index)
    {
         if(s>index)
           
            System.out.println(s);
         else
         {
           s=s*10+i;
           ++i;
         }}
      

  9.   

    先给个递归的算法,递归的是第n个数,然后累加,哈哈,可能不算纯粹的递归吧:
    public class Sum {
    public static int no(int i){
    if(i==1)
    return i;
    else
    return (int)(Math.pow(10, i-1) + no (i-1));
    }

    public static int sum(int i){
    int total = 0;

    if(i==1)
    total = no(i);
    else{
    while (i > 0){
    total += no(i);
    i--;
    }
    }
    return total;
    }

    public static void main(String args[]){
    System.out.println(sum(5));
    }
    }再给一个利用归纳法推出来的算法。从整个算式的和出发,当n=1时,和sum=1;当n=2时,sum=11+1=10^1 + 1*2; 当n=3时,sum = 111 + 11 + 1 = 10^2 + 10^1 * 2 + 1 *3...把1看成10的0次方,那么很容易得到我们需要的这个sum公式:sum(n) = 10^(n-1)*1 + 10^(n-2)*2 + ... 10^m*k + ... + 10^0*n (m+k=n)。代码如下:
    public class Sum { public static int sum(int i){
    double total = 0;
    int count = 1;

    if(i==1)
    total = Math.pow(10, i-1);
    else{
    while (i > 0){
    total += Math.pow(10, i-1) * count;
    i --;
    count ++;
    }
    }
    return (int)total;
    }

    public static void main(String args[]){
    System.out.println(sum(5));
    }
    }两个算法效率显然是后者更好,复杂度是O(n)。当然了,没有加入越界处理,lz自己加一下吧。
      

  10.   

    不好意思,上面第二段代码完全可以写成这样,不用那个if/else判断,糊涂了!public class Sum { public static int sum(int i){
    double total = 0;
    int count = 1;

    while (i > 0){
    total += Math.pow(10, i-1) * count;
    i --;
    count ++;
    } return (int)total;
    }

    public static void main(String args[]){
    System.out.println(sum(6));
    }
    }