Java递归求费数列和_Java方法的递归调用求100以内自然数的累加和以及斐波拉契数列...

问题:

求100以内自然数的累加和。1+2+3+4+5...+98+99+10

考察:方法的递归调用

难点:

递归调用可以看作的循环,既然时循环就要有结束循环的条件,不然就是个死循环。

方法一:

用for循环来实现累加求和。难点在于,要定义一个变量"sum"来接收每次相加的和。

@Testpublic voidadd() {int sum=0;for(int i=1;i<=100;i++){

sum+=i;

}

System.out.println("sum:="+sum);

}

方法二:

用方法的递归调用来实现。难点:首先考虑在什么情况下循环会结束,然递归时值不断向结束循环的情况改变。

public static int recall(intn) {if(n==1){return 1;

}else{

//在方法体中调用方法自己就是递归调用。

//下面的n-1,经过多次递归调用后,n的值会变为1,而当n等于1时,函数就结束了,直接renturn了。return n+recall(n-1);

}

}

斐波拉契数列:

从第三项开始,每个数都等于前面两个数的和。

1,1,2,3,5,8,13,21,34,55,89,144...

一:

用for循环结算斐波拉契数列。只能计算小于等于92的情况,因为当大于92时,计算结果就超出了long整形的表示范围。

public static long fibLoop(int num) {

if (num < 1 || num>92)

return 0;

long a = 1;

long b = 1;

long temp;

for (int i = 3; i <= num; i++) {

temp = a;

a = b;

b += temp;

}

return b;

}

二:

用递归调用实现斐波拉契数列。

public static long fibRec(intnum) {if(num < 1)return 0;if(num < 3)return 1;return fibRec(num - 1) + fibRec(num - 2);

}

三:

用递归调用实现斐波拉契数列.支持超过92的大数。

static List list = new ArrayList(93);static{

list.add(BigDecimal.ZERO);

list.add(BigDecimal.ONE);

}/*** 1,2,3,4,5,6, 7 ,8

* 1,1,2,3,5,8,13,21

* 支持num超过92的超大型数字,使用了ArrayList进行缓存以提高性能*/

public static BigDecimal fibBig(intnum) {if(num < 0)return list.get(0);if (list.size() <=num)

list.add(fibBig(num- 1).add(fibBig(num - 2)));returnlist.get(num);

}

其它参考:

https://www.cnblogs.com/swfpt/p/6850396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值