文章插图
一、问题提出问题:把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种放法;
三、程序设计
#include <stdio.h>#include <stdlib.h>int Appledivide(m,n);int main(){int m,n;printf("请输入苹果和盘子个数(均小于10):n");scanf("%d%d",&m,&n);if(m<10&&n<10){int result = appledivide(m,n);printf("将%d苹果,放入%d个盘子,共有%d中方法",m,n,result);}elseprintf("苹果或盘子个数应小于10");return 0;}int appledivide(m,n){ // 如果碟子只有1个,无论苹果有多少个都只有一种放法if(m==0||n==1){return 1;}//如果碟子的个数大于苹果的个数if(n>m){return appledivide(m,m);}else{return appledivide(m,n-1) + appledivide(m-n,n);}}
四、程序结果显示示例:9个苹果9个盘子文章插图
【C语言习题:苹果装盘问题!用递归如何求解?】
推荐阅读
- Python 中的自然语言处理入门
- 苹果|8年烧钱无数没能造出一辆车:苹果汽车凉凉的节奏
- 获得网络安全工作所需的 5 种编程语言
- 苹果|iPhone 14系列价格遭曝光:或全系上涨!约5280元起售
- 苹果|传iPhone 14因停工将延期发布!库克:苹果几乎所有供应商已复产
- 苹果|苹果总部复工,每周只在办公室上班一天,员工还是不愿意?
- iphone 6sp屏幕尺寸?苹果6sp屏幕多少寸的
- AirPods 2 3?airpods二代三代
- 洋甘菊搭配什么花,苹果花搭配什么花茶饮用
- 野菊花图片和介绍及其功效,苹果花茶搭配及其功效介绍