递归问题

题目:

1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

一、题目分析

递归模型:经过n个村庄后剩余鸭子数为lastduck,则卖出的鸭子数为lastduck+2,经过这个村庄前的鸭子数为2*(lastduck+1)经过七个村庄时lastduck=2

二、算法构造

           2   n=7

f=  

          2*(lastduck+1)      0<n<7

三、源代码

package digui;

public class duck {
	public static void main(String args[]) {
		f();
	}
	public static void f() {
		int lastduck=2;//表示经过村庄后剩余鸭子的数量
		int n=0;//经过的村子数量
		int sumduck=0;//总的鸭子数量
		for(n=7;n>0;n--) {
			lastduck=(lastduck+1)*2;//经过村子时鸭子数=(经过村庄后剩余鸭子数+1)*2
			System.out.println("经过第"+n+"个村庄时鸭子数为"+lastduck);	
		}
		sumduck=lastduck;
	    System.out.println("鸭子的总数为:"+sumduck);
		
	}
	
	}
  • 调试、测试及运行结果

运行结果

调试

测试

package yz;
import java.util.Scanner;

public class test {
	public static void main(String args[]) {
		f();
	}
	public static void f() {
		int lastduck=2;//表示经过村庄后剩余鸭子的数量
	    System.out.println("请输入需要查询的村庄序号");
		
		 Scanner input = new Scanner(System.in);
		 int j = input.nextInt();

		for (int i = 0; i < (8-j); i++) {
			lastduck = (lastduck + 1) * 2;
		}
		
		System.out.println("经过第 " + j + "个村庄时,剩余鸭子的个数为" + lastduck);
	}


}

测试结果

题目

题目:角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。

  1. 题目分析

count(n)表示关于自然数n的一个函数,当n=1时,count(1)=1。当n>1且n为偶数时,count(n)=count(n/2);当 n>1且n为奇数时,count(n)=count(3*n+1)。得到自然数1的运算次数为每次运算次数之和。

2、算法构造

                       1   n=1

Count(n)=   count(n/2)   n>1&&n%2==0

                        Count(3*n+1)    n>1&&n%2!=0

3、源代码

package gj;
import java.util.Scanner;
public class gujiao {
	static int i = 0;
		public static void main(String[] args) {
			System.out.println("请输入需要计算的数字");
			Scanner input = new Scanner(System.in);
			int n = input.nextInt();
			int i = count(n);
			System.out.println("STEP= " +i);
		}

		public static int count(int n) {
			if (n == 1) {
					System.out.println(n);
				i++;
			}
			else if (n % 2 == 0) {
				System.out.println(n );
				count(n / 2);
				i++;
			} 
			else {
				System.out.println(n);
				count(n * 3 + 1);
				i++;
			}
			return i;
		}
	}

4、测试调试及运行结果

运行结果

调试

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值