今天学习的是递归相关的知识,有四道例题,代码如下:
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
//递归做题三要素
//1.明确目的
//2.寻找结束条件
//3.找出函数的等价关系式
//例 1:计算n的阶乘
//明确目的:计算f(n)=n*(n-1)*(n-2)*...*1
//结束条件:n=1
//等价关系式 :f(n)=n*f(n-1)
int f1(int n){
if(n<=1){
return 1;
}
return n*f1(n-1);
}
//例 2:输入一个整数,输出在每个数字后加上减号
//明确目的:输入n=abc,输出a-b-c-
//结束条件:abc/10<=0
//等价关系式 :f(n/10)
void f2(int n){
if(n==0)
return;
f2(n/10);
cout<<n%10<<"-";
}
//例 3:A1=A,A2=ABA,A3=ABACABA,输入n求An
//明确目的:输入n,输出一串字符串
//结束条件:n=1
//等价关系式 :f(n-1)+"A"+n-1+f(n-1)
string f3(int n){
if(n==1)
return "A";
return f3(n-1)+(char)('A'+n-1)+f3(n-1);
}
//例 4:倒置字符数组,并打印过程
//明确目的:输入字符长度n,输入字符数组
//结束条件:交换到了第m位,m>=n/2
//等价关系式 :f4(a,m+1)
int n;
void f4(char a[],int m){
if(m>=n/2)
return ;
char ch=a[m];
a[m]=a[n-m-1];
a[n-m-1]=ch;
for(int i=0;i<n;i++){
cout<<a[i];
}
cout<<endl;
f4(a,m+1);
}
int main(){
cout<<"f1(5)="<<f1(5)<<endl;
cout<<"f2(54321)=";f2(54321);
cout<<endl<<"f3(5)="<<f3(5)<<endl;
cin>>n;char s[n];
for(int i=0;i<n;i++){
cin>>s[i];
}
f4(s,0);
cout<<endl;
for(int i=0;i<n;i++){
cout<<s[i];
}
return 0;
}