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语言编程学习基地
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
