- 1
- 0
- 约3.26千字
- 约 20页
- 2022-09-21 发布于上海
- 举报
1
讨论问题 “下楼问题”
从楼上走到楼下共有h个台阶,每一步有三种走法
走一个台阶;
走二个台阶;
走三个台阶。
问可走出多少种方案,希望用递归思想来编程。
第1页/共20页
2
定义:
Try(i,s)——站在第i级台阶上往下试走第s步的过程
j=1,2,3 —— 在每一步可以试着走的台阶数
take[s] —— 存储第s步走过的台阶数
ij —— 说明第i级台阶已比要走的j级台阶小,j不可取
ij —— 说明站在第i级台阶上可试走j个台阶为一步
i==j —— 说明这一步走完后已到了楼下,这时一条下楼方案已试成,即可输出这一方案了
第2页/共20页
3
思路:
1、用枚举的方法,试着一步一步地走,从高到低,让i先取h值从楼上走到楼下,每走一步i的值会减去每一步所走的台阶数j,即i=h(初值),以后i=i-j,(j=1,2,3),当i=0时,说明已走到楼下。
2、枚举时,每一步都要试j或者是为1,或是为2,或是为3。这时可用for循环结构。
3、每一步走法都用相同的策略,故可以用递归算法。
第3页/共20页
4
见图
第4页/共20页
5
在上图中,A结点是被递归调用的结点,形式参数为i,s,A结点为一个与结点,进入B结点时的三个参数为i,s,j=3;进入C结点的参数为i,s,j=2;进入D结点的参数为i,s,j=1。Lp是三个结点都可用的循环体Lp。
Lp是一个分支结构的或结点。
第5页/共20页
6
(1)当ij时,说明第i级已经比一步该走的台阶数小了。这是一个直接可解结点E,什么也不做。
(2)当i=j时,要做相关联的G和H,G是直接可解结点,将第s步走过的台阶数j记入take数组,即take[s]=j;接着做H,H为或结点,有两个分支:
其一是:当i==j时,说明经过第s步,已走到楼下,输出该下楼行走方案,并将方案号加1;
其二是:当ij时,说明经过第s步,尚未走到楼下,尚需再试第s+1步的走法,注意这时站在第i-j级台阶上。因此要调用try(i-j,s+1)。
第6页/共20页
7
第7页/共20页
8
#include stdio.h // 预编译命令
int take[11]; // 定义全局变量:数组take,方案数num
int num = 0;
void try(int i, int s) // 被调用函数
{
int j,k; // 定义整型变量j表示每步允许走的台阶数,
// k临时变量
for (j = 3; j 0; j = j - 1) // 循环
{ // 循环体开始
if (i j) // 如果所剩台阶数小于允许走的台阶数j,
{ // 什么也不做
}
// else ……
第8页/共20页
9
else // 以下是i=j的情况
{
take[s] = j; // 记录第s步走j个台阶
if (i==j) // 如果已经到了楼下,做下列事情
{
num = num + 1; // 方案数加1
printf(方案%d : ,num); // 输出方案数
for (k=1; k=s; k=k+1) // 输出本方案的每一步
{ // 所走的台阶数
printf(%d ,take[k]);
}
printf(\n); // 换行
}
else // 尚未走到楼下
{
try(i-j, s+1); // 再试剩下的台阶(递归调用)
}
}
第9页/共20页
10
} // 循环体结束
} // 函数体结束
void main() // 主函数
{
int h; // 定义整型变量h是楼梯的台阶数
printf(“请输入楼梯的台阶数:); // 提示信息
scanf(%d,h); // 输入楼梯的台阶数
try(h,1); // 调用函数try(h,1)
printf(总方案数:%d\n,num); // 输出总方案数
}
第10页/共20页
11
第11页/共20页
12
八皇后问题
第12页/共20页
13
在8×8的棋盘上,放置8个皇后(棋子),使两两之间互不攻击。所谓互不攻击是说任何两个皇后都要满足:
(1)不在棋盘的同一行;
(2)不在棋盘的同一列;
(3)不在棋盘的同一对角线上。
因此可以推论出,棋盘共有8行,每行有且仅有一个皇后,故至多有8个皇后。这8个皇后每个应该放在哪一列上是解该题的任务。我们还是用试探的方法“向前走,碰壁回头”的策略。
您可能关注的文档
- 鳞状上皮细胞高病变概要.pptx
- 弹性形变和弹力定义.pptx
- 热力学二定律和卡诺定理.pptx
- 急性格林巴利综合征的治疗资料.pptx
- 家居空间色彩与材料质地.pptx
- 第二复习中职数学.pptx
- 管理学培训教材.pptx
- 教育学论文答辩.pptx
- 龚晖拉压强学习.pptx
- dna的粗提取学习.pptx
- 散文题型03 理解分析词句(题型专练)(全国通用)(解析版)-2026年高考语文二轮复习讲练.docx
- 考前押题10 阅读理解之应用文——关注生活 学以致用(原卷版)(押题训练)2026年高考英语阅读理解突破策略及押题(全国通用).docx
- 清单04 综合性学习之语言表达(仿写邀请转述劝说) 活动策划(知识 方法 能力清单)(解析版)-2026年中考语文二轮复习讲练(全国通用).docx
- 清单09 古诗文对比阅读之内容 情感 写法对比 语言 炼字 拓展探究(知识 方法 能力清单)(解析版)-2026年中考语文二轮复习讲练(全国通用).docx
- 小说易错02 重点情节理解偏差(选择题)(易错专练)(全国通用)(原卷版)-2026年高考语文二轮复习讲练.docx
- 专题01 声现象(题型专练)(全国通用)(原卷版)2026年中考物理二轮复习讲练.docx
- 清单08 文言文(议论类 书信应用类)阅读之论点把握 文体特点(知识 方法 能力清单)(解析版)-2026年中考语文二轮复习讲练(全国通用).docx
- 清单11 记叙文阅读之朗读设计 表达技巧 主旨情感 开放探究(知识 方法 能力清单)(解析版)-2026年中考语文二轮复习讲练(全国通用).docx
- 语言清单05 语法填空中的词类(五)无提示词--连词(全国通用)(原卷版)2026年高考英语二轮复习讲练.docx
- 第04讲 想象探索与科学精神(《西游记》《海底两万里》《昆虫记》全国通用(讲义)(解析版)2026年中考语文一轮复习讲练.docx
最近下载
- 2025云南农业大学后勤服务有限公司招聘32人备考题库带答案解析.docx VIP
- 松材线虫课件.pptx VIP
- 2023年洁净车间生产环境控制教材方案模板.pptx VIP
- 【PPT】品管圈(QCC)降低科室一次性耗材浪费率 .pptx
- 2026高中数学复习-专题19 立体几何初步(Ⅱ)(七大题型+模拟精练)(解析版).pdf VIP
- 2025年教师职称-山西-山西教师职称(基础知识、综合素质、小学体育)历年参考题典型考点含答案解析.docx VIP
- isilon Drive Support Package 驱动支持包 1.37 发布说明(英文).pdf VIP
- 企业消防安全知识培训.pptx
- 山东省阳谷县第二中学高中音乐:古老的声音教案.doc VIP
- 常用建筑材料图例整理.doc VIP
原创力文档

文档评论(0)