




如果您无法下载资料,请参考说明:
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<<“

ys****39
实名认证
内容提供者


最近下载