欢迎光临散文网 会员登陆 & 注册

C语言习题:苹果装盘问题!用递归如何求解?

2021-11-16 17:02 作者:C语言编程__Plus  | 我要投稿



一、问题提出

问题:把m个苹果放入n个盘子中,允许有的盘子为空,共有多少种方法?

注:

5,1,1和1 5 1属同一种方法

m,n均小于10

二、算法分析

设f(m,n) 为m个苹果,n个盘子的放法数目,则先对n作讨论,

当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m)

当n<=m:不同的放法可以分成两类:

有至少一个盘子空着,即相当于f(m,n) = f(m,n-1);

所有盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即f(m,n) = f(m-n,n).而总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)

递归出口条件说明:

当n=1时,所有苹果都必须放在一个盘子里,所以返回1;

当m==0(没有苹果可放)时,定义为1种放法;

三、程序设计



四、程序结果显示

示例:9个苹果9个盘子


如果你也喜欢编程,想学C/C++的话!如果你也想让自己成为一个具有真材实料的厉害的程序员,不妨从现在开始!

微信公众号:C语言编程学习基地

C语言零基础入门教程(83集全)

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!



C语言习题:苹果装盘问题!用递归如何求解?的评论 (共 条)

分享到微博请遵守国家法律