第 3 章(2)━━函数的递归调用、重载、默认参数.ppt 立即下载
2024-08-16
约4.9千字
约33页
0
186KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

第 3 章(2)━━函数的递归调用、重载、默认参数.ppt

第3章(2)━━函数的递归调用、重载、默认参数.ppt

预览

免费试读已结束,剩余 28 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C++程序设计主要内容函数的递归调用【例】(用递归算法求n!。)
分析:①确立递归公式:n!=n×(n-1)!
②分析递归结束条件:当n=0或n=1时,n!的值为1。
#include<iostream.h>
#include<stdlib.h>
intfun(intn)//函数fun()的功能是:求n!
{if(n==0||n==1)return1;	//先判断递归结束条件
return(n*fun(n-1));//再进行递归调用
}
voidmain()
{intn;
cout<<“请输入一个正整数:”;
cin>>n;
if(n<0){cout<<“输入数据有错!”;exit(0);}
cout<<n<<“!=”<<fun(n)<<endl;
}main()函数调用fun(3)时的执行过程:






main()函数调用fun(3)时栈中的变化情况:递归函数的执行过程【例】(分析下面递归函数的执行过程,并给出程序运行结果。)
#include<iostream.h>
voidsub(charc)
{cout<<c;
if(c==‘a’)return;
sub(c-1);
cout<<c;
return;
}
voidmain()
{charch=‘e’;
sub(ch);
}【例】(用递归算法计算从n个人中选择k个人组成一个委员会的不同组合数。)
分析:①确立递归的公式:由n人中选k人的组合数
=由n-1人中选k人的组合数+由n-1人中选k-1人的组合数
②分析递归的结束条件:当n==k或k==0时,组合数为1。
#include<iostream.h>
#include<stdlib.h>
intcomm(intn,intk)//函数comm()的功能是:求n人中选k人的组合数
{if(n<k)return0;
if(n==k||k==0)return1;//先判断递归结束条件
return(comm(n-1,k)+comm(n-1,k-1));//再进行递归调用
}
voidmain()
{intn,k;
cout<<“请输入正整数n和k:”;
cin>>n>>k;
if(n<=0||k<=0){cout<<“输入数据有错!”;exit(0);}
cout<<“由”<<n<<“人中选”<<k<<“人的组合数=”<<comm(n,k)<<endl;
}【例】(汉诺塔问题:有A、B、C三根柱子,A柱上有n个大小不等的盘子,大盘在下,小盘在上。要求将这n个盘子从A柱移动到C柱,在移动的过程中可以借助A、B、C中任何一根柱子,但每次只允许移动一个盘子,且在移动过程中三根柱子上都必须保持大盘在下,小盘在上。)





分析:将n个盘子从A柱移动到C柱可分解为以下三个步骤:
①将A柱上n-1个盘子移动到B柱(借助C柱)
②将A柱上剩下的一个盘子移动到C柱上
③将n-1个盘子从B柱上移动到C柱上(借助A柱)
分析得到,以上三个步骤包含两种操作:
①将若干个盘子从一根柱上移动到另一根柱上,用递归函数hanoi()实现。
②将1个盘子从一根柱上移动到另一根柱上,用函数move()实现。#include<iostream.h>
voidmove(charget,charput)
{//函数move()的功能是:将一个盘子从get柱上移动到put柱上
cout<<get<<“柱→”<<put<<“柱”<<endl;
}
voidhanoi(intn,charone,chartwo,charthree)
{//函数hanoi()的功能是:将n个盘子从one柱移动到three柱(借助two柱)
if(n==1)
{move(one,three);return;}//先判断递归结束条件
else
{hanoi(n-1,one,three,two);
//将one柱上n-1个盘子移动到two柱(借助three柱),进行递归调用
move(one,three);
//将one柱上剩下的一个盘子移动到three柱上
	hanoi(n-1,two,one,three);
//将two柱上n-1个盘子移动到three柱(借助one柱),进行递归调用
	}
}voidmain()
{intn;
cout<<“请输入盘子数:”;
cin>>n;
cout<<“将”<<n<<“个盘子从A柱移动到C柱的步骤:”<<endl;
hanoi(n,‘A’,‘B’,‘C’);
}函数的重载重载函数的注意事项【例】
#include<iostream.h>
intadd(intx,inty)//重载函数
{cout<<“正在进行:两个int型数据相加!\t\t”;return(x+y);}
floatadd(floatx,floaty)//重载函数
{cout<<“
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

第 3 章(2)━━函数的递归调用、重载、默认参数

文档大小:186KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用