这两个程序高怎么编写,有没有高手知道下

来源:百度知道 编辑:UC知道 时间:2024/05/29 03:59:32
求1+2!+3!+……+20!的值。(n!=1*2*3*……*n)
这个该怎么编写?
还有一题
一个数列的前三项依次为0,0,1,以后的每项都是前三项的和,请编写程序打印此数列的所有项,直到数列的某一项的值超过1000为止。
这两个程序高怎么编写,有没有高手知道下

其实这两题都是考递归的,但是我超级不喜欢递归(虽然程序结构易构造,但是效率太低)

/**
程序函数就是对描述语言的直接翻译,我想这样比较好懂
*/
public class I_Hate_Factorial{
public static void main(String[] args){
int i = 1;
long result = 0;

for(;i<=20;i++){
result+=jc(i);
}
System.out.println("1!+ ...+20! result is:"+result);

int[] nums = new int[]{0,0,1};//初始状态
int nextNum = 0;
while((nextNum=getNextNum(nums))<1000){
System.out.println(nextNum+" ");
}
}

/**
* 获取阶乘
* @param n 数字
* @return 阶乘结果
*/
private static long jc(int n){
int i=1;
long result=1;
for(;i<=n;i++){
result*=n;
}
return result;
}

/**
* 获取下一位数
这个函数应该使用的结构是队列,但是题目过于简单,为这个声明个队列,又入队,又出队,反而不利于楼主理解.所以还是算了
* @param nums 前3位
* @return 下一位
*/
private static int getNextNum(int[] nums){

int nextNum = nums[