遞歸之兔子問題

1.有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問第二十個月的兔子對數爲多少?

(使用遞歸去解決)

分析:首先我們要明白題目的意思指的是每個月的兔子總對數;假設將兔子分爲小中大三種,兔子從出生後三個月後每個月就會生出一對兔子,

那麼我們假定第一個月的兔子爲小兔子,第二個月爲中兔子,第三個月之後就爲大兔子,那麼第一個月分別有1、0、0,第二個月分別爲0、1、0,

第三個月分別爲1、0、1,第四個月分別爲,1、1、1,第五個月分別爲2、1、2,第六個月分別爲3、2、3,第七個月分別爲5、3、5……

兔子總數分別爲:1、1、2、3、5、8、13……

於是得出了一個規律,從第三個月起,後面的兔子總數都等於前面兩個月的兔子總數之和,即爲斐波那契數列。

package com.hui.test;
/**
 * 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,
 * 假如兔子都不死,問第二十個月的兔子對數爲多少?(使用遞歸去解決)
 * 
 * */
public class Homework1 {
	public static void main(String[] args) {
		int i = 20;
		
		System.out.println("兔子第"+i+"個月的總數爲:"+f(i));
		
	}
	public static int f(int x) {
		//第一月和第二月都是1對
		if(x == 1 || x == 2) {
			return 1;
		}else {//第三個月開始是之前兩個月的數量之和
			return f(x-1)+f(x-2);
		}
		
	}
}

 

 

2:定義一個數組,比如:int[] arr = {13,24,57,69,80}使用二分查找查找這個數組中的24元素對應的索引

二分法思想:

 

假如有一組數爲3,12,24,36,55,68,75,88要查給定的值24.可設三個變量front,mid,end分別指向數據的上界,中間和下界,mid=(front+end)/2.

1.開始令front=0(指向3),end=7(指向88),則mid=3(指向36)。因爲mid>x,故應在前半段中查找。

2.令新的end=mid-1=2,而front=0不變,則新的mid=1。此時x>mid,故確定應在後半段中查找。

3.令新的front=mid+1=2,而end=2不變,則新的mid=2,此時a[mid]=x,查找成功。

4.如果要查找的數不是數列中的數,例如x=25,當第三次判斷時,x>a[mid],按以上規律,令front=mid+1,即front=3,出現front>end的情況,表示查找不成功。

 

3:統計大串中小串出現的次數

舉例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出

現了5次

 

package org.westos_10_作業;
/**
 *需求 
 * 3:統計大串中小串出現的次數
        舉例:在字符串” woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出
        現了5次

 * */
public class Homework3 {
	public static void main(String[] args) {
		//定義一個字符串
		String str = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
		
		int count = 0;
		for(int i=0;i<str.length()-3;i++) {
			//使用subString方法獲得字符串的一部分並返回
			String s = str.substring(i, i+4);
			if("java".equals(s)) {
				count++;
			}
		}
		System.out.println("一共有"+count+"個java");
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章