`
show213
  • 浏览: 6611 次
社区版块
存档分类
最新评论

数列的打印

    博客分类:
  • Java
阅读更多
首先,让我们来看看,一个最简单的的数列打印,从1一直累加到20。也就是1+2+3+4+5....
做这种题有很多种做法。关键是要有思路。



从上图中可以看到一个分析的过程
public int sum(int max){		
		int sum=1;	
		int i=1;
		while(i<max){
			//可以看到中间的一列是递增的,那我就拿i来做递增
                         i++;
                        //而sum的位置也很有意思,即是第一行的结束,又是下一次的加数
			sum=sum+i;				
	}		
    return sum;	
}

那接下来我们来看如何求一组数列:
斐波那契数列:0,1,1,2,3,5,8,13,21……








首先是下标越界



虽然经过调试过没有下标越界,但值却全部都是0,然后经过调试发现,第一轮的值都是零,于是果断把a初始化为1



public void Fibonacci(int max){

//调到4以后没有越界
		int arr=this.Shu(max);
		//System.out.println(arr);
		int k[]=new int[arr+4];		
		int a=1;
		for(int i=1;i<=arr;i=i+3){		
			k[i+1]=a;
			k[i+2]=k[i]+k[i+1];
			k[i+3]=k[i+1]+k[i+2];
			a=k[i+2]+k[i+3];	
			if(a>max){
				break;
			}
			//System.out.println("a="+a);
		}		
		
		int p=1;
		do{			
			System.out.print(k[p]+" ");
			p++;
		}while(p<k.length&&k[p]!=0);

	      
}

public int ArrCount(int max){
		String str=String.valueOf(k);		
		return str.length()+str.length()*4;		
}
		

以下为优化代码
public static int[] Update_2(int size) {

		int data[] = new int[size];

		// -----------------------------

		for (int i = 0; i < data.length; i++) {
                   //观察数列会发现i小于2时下标和数值同步
			if (i < 2) {

				data[i] = i;
			} else {

				data[i] = data[i - 1] + data[i - 2];
			}

		}

		return data;
	}


其实一个程序员的大部时间都是用在编写和调试两个方面,所以思路越清淅,那么这两方面所耗的时间自然就会很短。




  • 大小: 1.2 MB
  • 大小: 1.2 MB
  • 大小: 53.4 KB
  • 大小: 45.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics