C++函数、递推、递归(课堂PPT)

合集下载

C++函数、递推、递归ppt课件

C++函数、递推、递归ppt课件

i = 7 s1 = 2 * (s2 + 1) ; s2 = s1 ;
// S(7) = 2 * (S(8) + 1) // s2 = s1 = S(7)
i = 6 s1 = 2 * (s2 + 1) ; s2 = s1 ;
// S(6) = 2 * (S(7) + 1) // s2 = s1 = S(6)
看一个简单的例子:
1 4
第九讲——函数、递推、递归
递归
有 5 个人坐在一起,问第 5 个人多少岁? 他说比第 4 个人 大两岁。问第 4 个人岁数,他说比第 3 个人大两岁。问第 3 个人,又说比第 2 个人大两岁。问第 2 个人,说比第 1 个人 大两岁。最后问第 1 个人,他说是 10 岁。请问第 5 个人多 大?
3
第九讲——函数、递推、递归
解题思路:
假设用 S(i) 表示第 i 天没吃之前的桃子数目;

S(1) 即为第 1 天所摘的桃子数; S(2) = S(1) * 1/2 – 1 第 2 天没吃之前的桃子数
S(3) = S(2) * 1/2 - 1 第 3 天没吃之前的桃子数


S(9) = S(8) * 1/2 - 1 第 9 天没吃之前的桃子数
= age(2) + 2 + 2 + 2 // c = age(2) + 2
= age(1) + 2 + 2 + 2 + 2;// c = 10;
2 2
计算年龄程序
第九讲——函数、递推、递归
2 3
第九讲——函数、递推、递归
递归算例(2)
用递归方法计算 n! 算法思路:

《c语言递归算法》课件

《c语言递归算法》课件
《C语言递归算法》PPT 课件
C语言递归算法是一种强大的编程技巧,通过函数自身调用实现问题的解决。 本课件将介绍递归算法的概念、实现方式、应用场景、优缺点以及与循环的 区别,同时还会通过案例演示帮助理解。
什么是递归算法?
基本概念
递归是指函数直接或间接地调用自身的过程。
递归特点
递归算法需要有基准条件和递推关系,用于结 束递归和推进递归过程。
递归算法的实现方式
递归函数
通过函数自身调用实现递归,需要定义递归函数和 递归终止条件。
递归流程图
通过流程图展示递归算法的执行过程,帮助理解递 归逻辑。
递归算法的应用场景
1 数学计算
递归算法可以用于解决数学问题,如斐波那契数列、阶乘等。
2 数据结构
递归算法在树、图等数据结构的遍历和搜索中有广泛应用。
递归算法的优点和缺点
优点
• 简化问题复杂度 • 代码结构清晰
缺点
• 执行效率较低 • 内存占用较高
递归算法与循环的区别
1
循环
2
迭代操作
3
递归
函数自身调用
区别
递归更直观,但消耗资源较多;循环更 高效,但代码可读性差。
递归算法的注意事项
1 递归终止条件
保证递归过程能够结束,否则可能导致死循 环。
2 堆栈溢出
过深的递归调用可能导致堆栈溢出,需要注 意递归深度。
递归算法的案例演示
斐波那契数列
通过递归实现斐波那契数列的计算。
二叉树遍历
通过递归遍历二叉树的各种方式。

C++函数、递推、递归ppt课件

C++函数、递推、递归ppt课件

i = 7 s1 = 2 * (s2 + 1) ; s2 = s1 ;
// S(7) = 2 * (S(8) + 1) // s2 = s1 = S(7)
i = 6 s1 = 2 * (s2 + 1) ; s2 = s1 ;
// S(6) = 2 * (S(7) + 1) // s2 = s1 = S(6)
3 0
第九讲——函数、递推、递归
一般形式: S(i-1) = 2 * (S(i) + 1), i = 2,3,4,…,10
则 S(1) 即为第 1 天所摘的桃子数; S(1) = 2 * (S(2) + 1) S(2) = 2 * (S(3) + 1) … S(8) = 2 * (S(9) + 1) S(10) = 1
i = 9 s1 = 2 * (s2 + 1) ; s2 = s1 ;
i = 8 s1 = 2 * (s2 + 1) ; s2 = s1 ;
// S(9) = 2 * (S(10) + 1) // s2 = s1 = S(9)
// S(8) = 2 * (S(9) + 1) // s2 = s1 = S(8)
例: 王小二自称刀工不错,有人放一张大的煎饼在砧板上,问他:
“饼不许离开砧板,切 100 刀最多能分成多少块?”
1 0
分析:
第九讲——函数、递推、递归
切一刀
切二刀
切三刀
切四刀
令 q(n) 表示切 n 刀能分成的块数,由上图可知
q(1) = 1 + 1 = 2 q(2) = 1 + 1 + 2 = 4 q(3) = 1 + 1 + 2 + 3 = 7 q(4) = 1 + 1 + 2 + 3 + 4 = 11

PPT-06函数递推和递归

PPT-06函数递推和递归
例:
bool checkprime( int );
15
函数的定义
函数返回值的类型 函数名(类型名 形式参数1,
类型名 形式参数2,. . . )
{
// 函数体
说明部分
语句部分
} 例: bool checkprime( int af )
checkprime 为函数名,要以英文字母开头
bool 是函数值的数据类型,这里是布尔型
18
被调用函数嵌套在 if 语句中,a 是实在参数
if ( checkprime( a ) )主函数 调用
checkprime( af ) 子函数 形式参数
19
实在参数是一个具有确定值的表达式
一个函数在调用子函数时,要将实在参数 赋给形式参数
调用时
17 实在参数 a
17 形式参数 af
实在参数的个数及类型应与形式参数一致。 赋值时前后对应关系不会改变。
两者配合得天衣无缝。
13
在checkprime( int af ) 函数 中,有return 0 和 return 1 两处 不同。
如果先有return 0了,后面 一条return 1 就不起作用了。
不会既执行return 0又执行 return 1。
14
函数的说明
要放在主函数之前,告诉系统 有自定义的子函数可以被调用。
for(i=1; i<=m; i=i+1 )
// 计数循环 i
sum=sum+power( i, l ); // 累加
return sum;
// 返回值sum给函数SOP(n, k)
}
// 自定义函数体结束
31
// 以下函数是被函数SOP(n, k)调用的函数 // 功能:计算p的q次幂

c语言--函数的递归调用PPT参考幻灯片

c语言--函数的递归调用PPT参考幻灯片

第机作业:num(n)= 2* (num(n+1)+1) (n<10)
❖ 说有一只调皮的小猴子,摘了一堆水果,第一天 吃了水果的一半,又多吃了一个;第二天吃了剩 下水果的一半,又多吃了一个;依次类推….到第 十天,发现只剩下了10个水果,请问这只猴子到 底摘了多少个水果?
16
可以看到: 1)、3)为同一问题,都为n –1个盘子借助于一个 空塔移至另一塔上。
10

例11 Hanoi问题
第五章 函数
A
B
C
11

12
程序如下:
A
B
C
A
B
C
A
B
C
A
B
C
第五章 函数
void move(char getone, char putone) {printf("%c--->%c\n",getone,putone); }
1
第五章 函数
张福祥 主编
辽宁大学出版社
1

2
第五章 函数
我们先看这样一个例子:
❖ 说有一只调皮的小猴子,摘了一堆水果,第一天 吃了水果的一半,又多吃了一个;第二天吃了剩 下水果的一半,又多吃了一个;依次类推….到第 十天,发现只剩下了1个水果,请问这只猴子到 底摘了多少个水果?
2

3
第五章 函数
第五章 函数
age(int n) { int c;
if(n==1) c=10; else c = age(n-1)+2; return(c) ; }
age(5)
n=5
n=4
n=3
n=2
n=1

C++函数、递推、递归

C++函数、递推、递归
s2 = s1 ;
s1 = 2 * (s2 + 1) ;
s2 = s1 ;
s1 = 2 * (s2 + 1) ; s2 = s1 ;
s1 = 2 * (s2 + 1) ; s2 = s1 ;
s1 = 2 * (s2 + 1) ;
s2 = s1 ;
// S(5) = 2 * (S(6) + 1) // s2 = s1 = S(5) // S(4) = 2 * (S(5) + 1) // s2 = s1 = S(4) // S(3) = 2 * (S(4) + 1) // s2 = s1 = S(3)
•fact(1) = 1 (边界条件)
精品PPT
第九讲——函数(hánshù)、递推、递 归
递推算(tuī suàn)例(3)
递推算法程序实现: 有了通项公式和边界条件后,采用循环结构,从边
界条件出 发,利用通项公式通过若干步递推过程就可以求出结果;
例: 王小二自称刀工不错,有人放一张大的煎饼在砧板上,问他: “饼不许离开砧板,切 100 刀最多能分成多少块?”
借助循环结构采用递推方法求解!
精品PPT
第九讲——函数(hánshù)、递推、 递归
一般(yībān) 形式a:ge(n) = 10
age(n) = age(n-1) + 2
(n=1)
(n>2)
精品PPT
第九讲——函数(hánshù)、递推、递 归
分析: 上述求解是从求解目标出发,即将第 n 个人的年龄表示第 (n-1) 个人的年龄,再回溯到第 (n-2)个人的年龄 …… 直 到第 1 个人的年龄;(回溯阶段) 然后,采用递推方法,从第 1 个人的已知年龄推算第 2 个 人的年龄,在推算第 3 个人的年龄,直到推算出第 5 个 人的 年龄;(递推阶段) 这是一个递归问题,对它的求解可以分成 回溯 和 递推 两 个阶段;显而易见,如果不希望递归过程无限制的进行 下去, 必须有一个结束(jiéshù)递归过程的条件;如: age(1) = 10

C++函数、递推、递归ppt课件

C++函数、递推、递归ppt课件

递归调用
在调用一个函数的过程中又出现直接或间接地调用该 函数本身,称为函数的递归(recursive)调用; C++允许函数的递归调用;
例:
int f(int x) {
int y, z;
z = f(y);
return 2 * z;
}
大连理工大学 盘锦校区基础教学部
19
递归调用
第九讲——函数、递推、递归
大连理工大学 盘锦校区基础教学部
23
第九讲——函数、递推、递归
递归算例(2)
用递归方法计算 n! 算法思路:
若 n = 10, 则 n! = 10 * 9! 定义函数 fact(n) 表示计算 n!的函数,则有
fact(n) = n * fact(n-1), n > 1
fact(n) = 1,
n = 0, n = 1;
然后,采用递推方法,从第 1 个人的已知年龄推算第 2 个 人的年龄,在推算第 3 个人的年龄,直到推算出第 5 个人的 年龄;(递推阶段)
这是一个递归问题,对它的求解可以分成 回溯 和 递推 两 个阶段;显而易见,如果不希望递归过程无限制的进行下去, 必须有一个结束递归过程的条件;如:age(1) = 10
大连理工大学 盘锦校区基础教学部
12
递推算例(3 ) 参考程序:
第九讲——函数、递推、递归
大连理工大学 盘锦校区基础教学部
13
递归
第九讲——函数、递推、递归
递归算法在可计算理论中占有重要地位,它是算法设计的有 力工具,对于拓展编程思路非常有用。 就递归算法而言不涉及高深数学知识,只不过初学者建立起递 归概念不太容易。
大连理工大学 盘锦校区基础教学部

C语言递归算法PPT演示课件

C语言递归算法PPT演示课件

for (k=1;k<=10;k++)
cin>>a[k];
cin>>x;
search(x,L,R);
system("pause");
} void search(int x,int top,int bot) //二分查找递归过程
{
int mid;
if (top<=bot)
{ mid=(top+bot)/2;
an加入到k个子集中的任一个中去,共有k种加入方式,这样对
于an的每一种加入方式,都可以使集合划分为k个子集,因此
根据乘法原理,划分数共有k * S(n-1,k)个。
•16
综合上述两种情况,应用加法原理,得出n个元素的集合 {a1,a2,……,an}划分为k个子集的划分数为以下递归公 式:S(n,k)=S(n-1,k-1) + k * S(n-1,k) (n>k,k>0)。
确定n个元素a1 ,a2 ,……,an 放入k个无标号盒子中去
的划分数S(n,k)。
【输入样例】setsub.in
23 7
【输出样例】setsub.out
4382641999117305
•15
【算法分析】
先举个例子,设S={1,2,3,4},k=3,不难得出S有 6种不同的划分方案,即划分数S(4,3)=6,具体方案为:
int s(int n, int k)
//数据还有可能越界,请用高精度计算
{
if ((n < k) || (k == 0)) return 0;
//满足边界条件,退出
if ((k == 1) || (k == n)) return 1;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例: 王小二自称刀工不错,有人放一张大的煎饼在砧板上,问他: “饼不许离开砧板,切 100 刀最多能分成多少块?”
1 0
分析:
第九讲——函数、递推、递归
切一刀
切二刀
切三刀
切四刀
令 q(n) 表示切 n 刀能分成的块数,由上图可知
q(1) = 1 + 1 = 2 q(2) = 1 + 1 + 2 = 4 q(3) = 1 + 1 + 2 + 3 = 7 q(4) = 1 + 1 + 2 + 3 + 4 = 11
S(10) = S(9) * 1/2 – 1 第 10 天没吃之前的桃子数
4
第九讲——函数、递推、递归
一般形式: S(i) = S(i-1) * 1/2 – 1,
i = 2, 3, …, 10;
这个公式可用于知第 1 天没吃之前的桃子 数推算第 2 天 没吃之前的,再推算第 3 天没吃之前的,…….。现在要求的是 第 1 天没吃之前的。能否倒过来,先知 第 10 天没吃之前的 的再反推第 9天没吃之 的,……,直到第 1 天没吃之前的。为 此将上式改写为:
《C++语言程序设计》
第九讲 函数、递推、递 归
1
递推
第九讲——函数、递推、递归
递推是计算机数值计算中的一个重要算法。
思路:通过数学推导,将复杂的运算化解为若干重复 的简单运算,以充分发挥计算机长于重复运算的特点;
递推法特点:从一个已知的事实出发,按一定规律推 出下一个事实,再从这个新的已知事实出发,再向下 推出一个新的事实。
1!,2!,3!,…,(n-1)!, n!
另fact(n) 为 n 阶乘,依据后项与前项的关系可以写出递推公
式:
fact(n) = n * fact(n-1) (通项公式)
fact(1) = 1 (边界条件)
9
第九讲——函数、递推、递归
递推算例(3)
递推算法程序实现: 有了通项公式和边界条件后,采用循环结构, 从边界条件出 发,利用通项公式通过若干步递推过程就可以求 出结果;
2
第九讲——函数、递推、递归
递推举例(1)
例: (猴子吃桃问题)
猴子第1天摘下若干桃子,当即吃了一半,还不过瘾, 又多吃了一个。第2天早上又将剩下的桃子吃掉一半, 又多吃了一个。以后每天早上都吃了前一天剩下的一 半另加一个。到第10天早上想再吃时,就只剩下一个 桃子了。问第1天猴子共摘了多少桃子?
个人, 岁。
大?age(3) = age(2) + 2;
i = 4 s1 = 2 * (s2 + 1) ; s2 = s1 ;
i = 3 s1 = 2 * (s2 + 1) ; s2 = s1 ;
i = 2 s1 = 2 * (s2 + 1) ; s2 = s1 ;
i = 1 s1 = 2 * (s2 + 1) ; s2 = s1 ;
// S(5) = 2 * (S(6) + 1) // s2 = s1 = S(5) // S(4) = 2 * (S(5) + 1) // s2 = s1 = S(4) // S(3) = 2 * (S(4) + 1) // s2 = s1 = S(3)
s2 = s1 ;
// s2 = s1 = S(7)
i = 6 s1 = 2 * (s2 + 1) ; s2 = s1 ;
// S(6) = 2 * (S(7) + 1) // s2 = s1 = S(6)
7
第九讲——函数、递推、递归
i = 5 s1 = 2 * (s2 + 1) ; s2 = s1 ;
1 1
分析:
第九讲——函数、递推、递归
切一刀
切二刀
切三刀
切四刀
在切法上是让每两条线都有交点。用归纳法可得出
q(n) = q(n-1) + n q(0) = 1 (边界条件)
1 2
递推算例(3) 参考程序:
第九讲——函数、递推、递归
1 3
递归
第九讲——函数、递推、递归
递归算法在可计算理论中占有重要地位,它是算法设计的有 力工具,对于拓展编程思路非常有用。 就递归算法而言不涉及高深数学知识,只不过初学者建立起递 归概念不太容易。
3
第九讲——函数、递推、递归
解题思路:
假设用 S(i) 表示第 i 天没吃之前的桃子数目;

S(1) 即为第 1
天所摘的桃子数;
S(2) = S(1) * 1/2 – 1 第 2 天没吃之前的桃子数
S(3) = S(2) * 1/2 - 1 第 3 天没吃之前的桃子数


S(9) = S(8) * 1/2 - 1 第 9 天没吃之前的桃子数
// S(2) = 2 * (S(3) + 1) // s2 = s1 = S(2)
// S(1) = 2 * (S(2) + 1) // s2 = s1 = S(1)
8
第九讲——函数、递推、递归
递推举例(2)
递推数列 一个数列从某一项起,它的任何一项都可以用它前
面的若干项 来确定,这样的数列称为递推数列,表示某项与其 前面的若干 项的关系就称为递推公式。例如自然数 1,2,…,n 的 阶乘就可 以形成如下数列:
看一个简单的例子:
1 4

第九讲——函数、递推、递归
递归
有 5 个人坐在一起,问第 5 个人多少岁? 他说比第 4 个人
大两岁。问第
4个
人岁数,他说比第 3 个人大两岁。问第 3
个人,又说比第 2
个人
大两岁。问第 2
个人,
说比第 1
个人
大两岁。最后问第 1 他说ag是e(51)0= age(4) + 2; 请问ag第e(45) 个= 人ag多e(3) + 2;
i = 8 s1 = 2 * (s2 + 1) ; s2 = s1 ;
// S(9) = 2 * (S(10) + 1) // s2 = s1 = S(9)
// S(8) = 2 * (S(9) + 1) // s2 = s1 = S(8)
i = 7 s1 = 2 * (s2 + 1) ; // S(7) = 2 * (S(8) + 1)
5
程序:
大连理工大学 盘锦校区基础教学部
第九讲——函数、递推、递归
6
6
第九讲——函数、递推、递归
分析:
一般形式:S(i-1) = 2 * (S(i) + 1), i = 10, 9, 8,…, 2;
初始:s2 = 1 ; // S(10) = 1
i = 9 s1 = 2 * (s2 + 1) ; s2 = s1 ;
相关文档
最新文档