本帖最后由 (_演绎、青春 于 2015-1-10 23:39 编辑
- /*思考题:兔子问题
- *古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
- *小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,
- *问第20个月的兔子对数为多少?
- */
- public class TuZi {
- public static void main(String[] args) {
- // 用数组做
- int[] arr = new int[20];
- arr[0] = 1;
- arr[1] = 1;
- // arr[2] = arr[0] + arr[1];
- // arr[3] = arr[1] + arr[2];
- // arr[4] = arr[2] + arr[3];
- // ...
- // arr[19] = arr[17]+arr[18]
- for (int x = 2; x < arr.length; x++) {
- arr[x] = arr[x - 2] + arr[x - 1];
- }
- System.out.println(arr[19]); // 6765
- System.out
- .println("------------------------------------------------------------");
- // 变量的交换实现
- int a = 1;
- int b = 1;
- for (int x = 0; x < 18; x++) {
- // 定义临时变量,记录以前的a
- int temp = a;
- a = b;
- b = temp + b;
- }
- System.out.println(b);
- System.out
- .println("------------------------------------------------------------");
- // 用递归实现
- System.out.println(fib(20));
- }
- /*
- * 递归其实就是方法调用方法本身: 假设fib(n)表示第n个月的兔子对数。 第n-1个月和第n-2个月的兔子对数:
- * fib(n-1),fib(n-2)
- */
- public static int fib(int n) {
- if (n == 1 || n == 2) {
- return 1;
- } else {
- return fib(n - 2) + fib(n - 1);
- }
- }
- }
复制代码
|
|