1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
题目分析:
经过第n个村子时有f(n)只鸭子,卖出去了f(n)/2+1只鸭子,还剩f(n+1)只鸭子,也就是经过第n+1个村子剩下的鸭子数
思路:经过了七个村子后还剩两只鸭子,既经过第八个村子时还有两只鸭子,f(8)=2
递归出口:f(8)=2 n=8
递归体:f(n+1)=f(n)-f(n)/2-1 f(n+1)=f(n)/2-1 f(n)=2*f(n+1)+2
程序:
/**
* Project Name:recurson
* File Name:Exercise.java
* Package Name:www.domain
* Date:2018年11月16日下午2:30:50
*/
package www.domain;
/**
* ClassName:Exercise <br/>
* Function: 一个人赶着鸭子去每个村庄卖
* 每经过一个村子卖去所赶鸭子的一半又一只
* 这样他经过了七个村子后还剩两只鸭子
* 问他出发时共赶多少只鸭子
* 经过每个村子卖出多少只鸭子<br/>
* Date: 2018年11月16日 下午2:30:50 <br/>
* @author 陈茜
*/
public class Exercise {
/**
* f:计算经过第i个村庄时的鸭子数<br/>
* i<=7 <br/>
* @author 陈茜
* @param i:表示经过第i个村庄,i取整数
* @return sub:经过该村庄时的鸭子数
*/
public static int f(int i) {
/*int sub=0;
if (i!=8) {
for (int j = i; j > 0; j--) {
sub=f(i+1)*2+2;//递归体
}
}
if (i==8) {//递归出口
sub=2;
}*/
//改进
int sub=2;
if(i!=8) {
sub=f(i+1)*2+2;
i--;
}
return sub;
}
public static void main(String[] args) {
for (int i = 1; i < 8; i++) {
System.out.println("经过第"+i+"个村庄时有"+f(i)+"只鸭子,卖出了"+(f(i)/2+1)+"只鸭子,还剩"+f(i+1)+"只鸭子")