再帰と循環で問題を解く--サルは桃を食べる.

7635 ワード

問題を解く–サルが桃を食べる問題
質問:猿は初日に桃を数個摘んで、すぐに半分食べて、また1つ多く食べて、翌朝また残りの桃を半分食べて、また1つ多く食べました.それから毎朝、前日の残りの半分を食べました.10日目の朝まで桃が1つしか残っていませんでした.初日にどれだけの桃を摘んだかを求めます.
ロジックは9日目に半分食べて、また1つ食べて、10日目までまだ1つ残っています.だから9日目の桃の数は:(1+1)*2;そして8日目は((((1+1)*2)*2...だから:int day=1;int peath=0;//桃数サイクル9回{peach=(peach+1)*2;}
再帰:最初は未知数Xで、9日間食べて、最終日に1つ残って、つまり関数の出口が確定して、day==1の時、桃の数1を返します;計算は上のruturn(関数(day+1)*2のようになります.
コード#コード#
		int peach=1;
		int day=10
		for (int i =day; i >1; i--) {
			peach=2*(peach+1);
		}
		System.out.println(peach);

再帰版:
public static int peachNum(int day){
		if(day==10) return 1;//    
		return 2*(peachNum(day+1)+1);
	}

至尊カスタマイズ版:数日目に桃を1つ残すことを指定します.初日の探索桃数を算出する再帰時に入力を継続させたくないため、再帰出口の判定数を常に「リフレッシュ」することができないため、クラス内に属性を設定、構造関数を定義する.コンストラクション関数をまだ学んでいない場合は、コメントの注釈を削除し、他のものを削除することができます.
public class EatPeach {
	static int num=0;
	public EatPeach() {
		System.out.println("       N:");
		Scanner s=new Scanner(System.in);
		this.num=s.nextInt();
	}
	public static void main(String[] args) {
		EatPeach eatPeach=new EatPeach();
		System.out.println(peachNum(1));
//		int peach=1;
//		System.out.println("       N:");
//		Scanner s2=new Scanner(System.in);
//		int num=s2.nextInt();
//		for (int i =num; i >1; i--) {
//			peach=2*(peach+1);
//		}
//		System.out.println(peach);
	}
	public static int peachNum(int day){
		if(day==num) return 1;//    
		return 2*(peachNum(day+1)+1);
	}

}