蓝桥杯自学第二天

今天学习的是递归相关的知识,有四道例题,代码如下:

#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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深夜不emo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值