经典递归 苹果的放法
来源:互联网 发布:农村淘宝村招募如何 编辑:程序博客网 时间:2024/06/09 18:12
今天看到一个苹果的递归方法,仔细看了一看,感觉理解还是有一定难度……
要设计一个递归函数,明确这个递归函数的定义,在这个函数里面反复调用自己从而求出问题的解。递归很多时候用于求有多少种解法的题目:这时要分清有多少种情况,然后把每一种情况产生的解的个数相加。
这里有一道经典的递归问题,一般基础语言书上都会有利用递归求斐波那契数,还有汉诺塔的问题都可以用递归。本文主要学习一下放苹果的问题,问题刚开始分析的时候有一定难度,但代码实现比较简单,而且方法不唯一。
如题:
M个同样的苹果放N个同样的盘子,允许有盘子空着, 问有多少种放法。注意:5 1 1和1 5 1是同一种放法
函数用fun(int m,int n)来表示,其中m为苹果的个数,n为篮子的数量。
分析:分两种情况:a.至少有一个盘子为空,此时放法种数与减去这个空盘子的放法种数相同,函数为fun(m,n-1)。b.所有盘子都不为空,此时可以从每个盘子里拿掉一个苹果而不影响放法种数,函数为fun(m-n,n)。
因此总数为:fun(m,n)=fun(m,n-1)+fun(m-n,n)
显然m<n时,只能满足第一种情况。
利用Java实现代码为:
package com.swjtu.other.pric;import java.util.Scanner;public class Apple {public static void main(String[] args) {System.out.println("请输入苹果的个数,且为非负整数:");Scanner mc = new Scanner(System.in);int apple = mc.nextInt();System.out.println("请输入篮子的个数:");Scanner nc = new Scanner(System.in);int basket = nc.nextInt();Apple creatApple = new Apple();System.out.println(" 总共有 " + creatApple.fun(apple, basket) + " 种放法!");}public int fun(int m,int n){if(m<=1||n==1)return 1;else if ( n == 0)return 0;else if(n>m)return fun(m,n-1);return fun(m-n,n) + fun(m,n-1);}}实现结果截图为:
0 0
- 经典递归 苹果的放法
- 经典递归问题--放苹果POJ【1664】
- POJ-1664 放苹果(递归的运用)
- POJ1664 放苹果 递归
- 递归~放苹果
- 放苹果,递归,Java
- poj1664--放苹果(递归)
- 递归 放苹果
- 递归--放苹果
- 递归-放苹果
- 放苹果(递归)
- 放苹果(递归)
- poj1664递归放苹果
- 放苹果递归思想
- 递归2---放苹果
- 递归--放苹果
- 放苹果(递归)
- 递归-放苹果问题
- Django 1.6 CBVs
- You have configured this virtual machine to use a 64-bit guest operating system. However, 64-bit op
- SAP ABAP通过MEMORY直接转换两个变量的值
- 网站抽奖活动页面设计及制作
- ADF Single/Multiple files uploading and downloading
- 经典递归 苹果的放法
- 百度——个人云存储pcs——Android使用百度云盘(1)——获取access token
- ios开发社区
- vmware workstation 安装centos系统
- Hypertable工具之Hyperspace
- A Fractal Model of the Lifecycle of Reusable Objects
- WinPcap原理
- 百度——个人云存储pcs——Android使用百度云盘(2)——创建文件夹和上传文件
- Cocos2d-x Tiled地图编辑器(二)精灵走动起来、碰撞检测