放苹果

放苹果

http://www.nowcoder.com/questionTerminal/bfd8234bb5e84be0b493656e390bdebf

采用递归的思想将此事件无限细分,每个事件可以分为f(m,n)=f(m-n,n)+f(m,n-1);f(m-n,n)是当苹果数大于等于盘子数的情况,f(m,n-1)是当苹果数小于盘子数的情况。当此事件分到苹果数为0或苹果数为1或盘子数为1的时候返回1,当苹果数小于0或盘子数小于等于0返回0.

import java.util.Scanner;
public class Main{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt())
        {
            System.out.println(count(sc.nextInt(),sc.nextInt()));
        }
        sc.close();
    }
    public static int count(int m,int n)
    {
        if(m<0||n<=0)
           return 0;
        //细分到苹果数为一或盘子数为一的情况返回一
        if(m==1||n==1||m==0)
            return 1;
        //将此事件无线细分
        return count(m,n-1)+count(m-n,n);
    }
}
全部评论
作者的解释有点苍白。 递归的核心是递进和回归,递进就是要逐渐减小问题规模,回归要保证有出口(或称base case)。如何减小问题规模呢?m个苹果放进n个盘子,求不同放法的种数,可以分为两类情况:1.让每个盘子都有苹果放着。2.至少有一个盘子空着。有且仅有这两种情况,两种情况没有交集。7个苹果放进3个盘子,共有8种不同放法,可以用此实例加深以上理解。现在,用f(m,n)表示将m个苹果放进n个盘子不同放法的种数。第一种情况相当于给每个盘子先发1个苹果,再将m-n个苹果放进n个盘子里,不同放法种数为f(m-n,n)。第二种情况相当于摒弃掉空着的那个盘子,将m个苹果放进n-1个盘子里,不同放法种数为f(m,n-1)。因此,f(m,n) = f(m-n,n)+f(m,n-1)。至此,问题规模已经减小了,再结合递归出口,就可以完成求解了。
70 回复 分享
发布于 2022-10-09 22:40 浙江
这样解释: 所有情况分为func(m,n) = 没有一个盘子是空盘子的情况func(m-n,n) + 至少有一个盘子是空盘子的情况func(m,n-1)
8 回复 分享
发布于 2022-09-13 11:39 浙江
看不懂?
1 回复 分享
发布于 2022-05-28 15:53
牛逼啊 这个函数没用过
1 回复 分享
发布于 2022-06-11 15:51
是怎么想到的这种解法,太奇妙了
1 回复 分享
发布于 2024-05-17 07:25 北京
没点数学基础真做不出来
1 回复 分享
发布于 2024-10-23 18:42 广东
请问这是哪路神仙?
点赞 回复 分享
发布于 2022-03-24 21:01
重入神仙之境,剑来
点赞 回复 分享
发布于 2022-04-07 19:38
很酷的想法,赞
点赞 回复 分享
发布于 2022-05-08 16:20
仙人指路
点赞 回复 分享
发布于 2022-05-14 17:42
牛逼
点赞 回复 分享
发布于 2022-06-25 21:23
大佬,有个问题我想问一下,递归最后一个return返回为什么要这样子写?帮帮孩子叭...
点赞 回复 分享
发布于 2022-08-01 14:35

相关推荐

hanliu:1. 排版与格式问题字体与对齐问题:标题和内容的字体大小差异不够明显,无法迅速吸引目光。某些文字看起来有些拥挤(比如校园经历中的“班委成员”部分)。2. 内容逻辑性模块顺序问题:实习经历放在较靠后的位置,实际上这部分内容对应聘来说更重要,建议提前突出。细节表述不够突出:比如教育背景部分的专业课程仅仅列出名字,没有说明自己在这些课程中表现如何或者掌握了什么技能,缺乏量化描述。多余内容:例如“班委成员”和“宣传委员”这类校园经历,叙述过于普通,缺乏和岗位相关的实质性贡献。,建议简写。3. 措辞专业性表达不够精准:例如“协助班长与团支书更好地为同学服务”显得较为笼统,没有实际成果的体现。用词重复:如“学习了焊接”“学习了光检”等重复词语较多,缺乏丰富的动词来展示个人能力(如“负责”“优化”“改进”等)。技能展示不足:虽然列出了UG和CAD证书,但没有明确提到这些技能如何在实际工作中发挥作用。4. 技能匹配度技能深度不足:虽然列出了掌握的软件和技术,但没有描述技能水平(如“熟练掌握”“精通”),也没有具体案例支持这些技能。缺乏岗位导向性:比如针对机械设计与制造方向,实习经历提到了“E6尾灯项目”,但没有详细说明自己在其中的技术贡献,可能会显得经验描述泛泛而谈。5. 自我评价问题表达空泛:如“具有良好的沟通协调能力”“责任心强”之类的描述太常见,没有让人眼前一亮的特点。缺乏成果支持:自我评价中的能力没有用具体项目、经历或成就来验证,可信度较弱。 兄弟加油
点赞 评论 收藏
分享
评论
115
26
分享

创作者周榜

更多
牛客网
牛客企业服务