古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子第三个月开始每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?
根据题意可知
1,1,2,3,5,8, 13, 21...
这是斐波那契数列,也就是说从第三项起每一项都是前两项的和
时间复杂度很大,有些数会被重复算很多次
private static int recursion(int month) {if(month <= 2) { return 1;}return recursion(month - 1) + recursion(month - 2);}
相比于递归法,效率高很多
private static long add(int month) {if(month <= 2) { return 1;}long ago = 1;long result = 1;for(int i = 3; i <= month; i++) {result += ago;ago = result - ago;}return result;}
递归法属于从需求项向前推算,导致很多项被重复计算,就算将重复计算存起来复用,又会占很多空间,这种情况可以考虑从第一项往后推到需求项。
本文发布于:2024-02-03 03:49:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170690334048453.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |