首页 > 编程语言 >递归(c++)

递归(c++)

时间:2024-09-11 22:20:08浏览次数:3  
标签:输出 return 递归 int 样例 c++ include

递归

1、斐波那契额数列

基础代码

#include <iostream>

using namespace std;

int f(int n)
{
	if (n == 1) return 1;
	if (n == 2) return 2;
	return f(n - 1) + f(n - 2);
}

int main()
{
	int n;
	cin >> n;
	cout << f(n) << endl;

	return 0;
}

在这里插入图片描述

递归实现指数型枚举(递归)

题目描述

从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。

输入格式

输入一个整数n。

输出格式

每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。对于没有选任何数的方案,输出空行。

本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。

数据范围

1 ≤ n ≤ 15

输入样例

3

输出样例

3
2
2 3
1
1 3
1 2
1 2 3

基础代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 20;
int n;

int st[N];// 0 表示还未考虑  1表示已经选择   2表示不选择

void dfs(int u) // u是指到那个位置了
{
	if (u == n) // 超过最后一个数字了
	{
		//输出
		for (int i = 0; i < n; i++)
			if (st[i] == 1) cout <<  i + 1<< ' ' ;
		puts("");
		return;
	}
	st[u] = 2;
	dfs(u + 1);
	st[u] = 0;

	st[u] = 1;
	dfs(u + 1);
	st[u] = 0;//恢复现场
}


int main()
{
	cin >> n;//从1 -  n  个数字

	dfs(0);

	return 0;
}

所有的递归过程都可以画一个递归搜索树
在这里插入图片描述

递归实现排列型枚举(递归)

题目描述

把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。

输入格式

一个整数n。

输出格式

按照从小到大的顺序输出所有方案,每行1个。

首先,同一行相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

数据范围

1 ≤ n ≤ 9

输入样例:

3

输出样例:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

基础代码:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 10;
int n;
int path[N];//记录路径
bool st[N];// 0表示没有放置数字  1表示放置了数字
void dfs(int u) //比较到第几个位置
{
	if (u == n)//比较到最后一个位置的时候
	{
		for (int i = 0; i < n; i++)
			cout << path[i] << ' ';//输出结果
		puts("");
		return;
	}

	//比较的过程
	for (int i = 0; i < n; i++)  // 比较的数字
	{
		if (st[i] == 0)//如果当前数字没有被使用
		{
			st[i] = 1;
			path[u] = i + 1;
			dfs(u + 1);
			st[i] = 0;
		}
	}
}

int main()
{
	cin >> n;
	dfs(0);
	return 0;
}

在这里插入图片描述

递归实现组合型枚举

从 1∼n1∼n 这 nn 个整数中随机选出 mm 个,输出所有可能的选择方案。

输入格式

两个整数 n,mn,m ,在同一行用空格隔开。

输出格式

按照从小到大的顺序输出所有方案,每行 11 个。

首先,同一行内的数升序排列,相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如 1 3 5 7 排在 1 3 6 8 前面)。

数据范围

n>0n>0 ,
0≤m≤n0≤m≤n ,
n+(n−m)≤25n+(n−m)≤25

输入样例:
5 3
输出样例:
1 2 3 
1 2 4 
1 2 5 
1 3 4 
1 3 5 
1 4 5 
2 3 4 
2 3 5 
2 4 5 
3 4 5 
代码
#include <iostream>
#include <algorithm>

using namespace std;
const int N = 30;
int n, m;
int path[N]; //记录方案的路径
int st[N];//0表示当前数字没有被使用  1表示已经被使用

void dfs(int u)
{
	//当排序到最后一位的时候
	if (u == m)
	{
		for (int i = 0; i < m; i++)
		{
			cout << path[i] << ' ';
		}
		puts("");
		return;
	}

	//排序的过程中
	for (int i = path[u - 1];i < n; i++)
	{
		if (st[i] == 0)
		{
			st[i] = 1;
			path[u] = i + 1;
			dfs(u + 1);
			st[i] = 0;
		}
	}
}

int main()
{
	cin >> n >> m;  //   1-n 个数字     取m个数字
	dfs(0);
	return 0;
}

标签:输出,return,递归,int,样例,c++,include
From: https://blog.csdn.net/weixin_73378557/article/details/142151964

相关文章

  • 函数递归的学习1
    了解递归递归是什么1.在C语言中,递归就是函数自己调用自己。递归的思想把⼀个大型复杂问题层层转化为⼀个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆分,递归就结束了。所以递归的思考方式就是把大事化小的过程。递归中的递就是递推的意思,归就是回归的意思。......
  • c++ 数字转化成 string
       ULONG转换成string方法1:使用std::to_string(C++11及更高版本)std::to_string是将数字转换为字符串的简单方式,适用于C++11及更高版本。#include<iostream>#include<string>intmain(){ULONGvalue=1234567890UL;//定义一个ULONG类型的值/......
  • c++ string 转换成 guid
      在C++中,将一个字符串转换为GUID(GloballyUniqueIdentifier)可以通过以下方法实现。GUID通常是128位(16字节)的标识符,以标准格式表示,例如:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。在C++中,常用的库之一是WindowsAPI,它提供了处理GUID的相关功能。这里是一个示例代码,将字符串转换......
  • 【自用22.】C++类的静态数据成员以及静态成员函数
    需要获取总的人数,如何实现?方案一:使用全局变量,在构造函数中对这个全局变量进行修改具体代码如下:在Human.cpp中定义全局变量,并在构造函数中对人数进行增加操作#include"Human.h"#include<iostream>usingnamespacestd;intHumanCount=0;Human::Human(){ name......
  • C++复习day10
    智能指针为什么需要智能指针?#include<iostream>usingnamespacestd;intdiv(){ inta,b; cin>>a>>b; if(b==0) throwinvalid_argument("除0错误"); returna/b;}voidFunc(){ //1、如果p1这里new抛异常会如何? //2、如果p2这里new抛异常会......
  • C++ web框架:matt-42/lithium
    一、代码示例#include<lithium_http_server.hh>#include<lithium_pgsql.hh>#include"symbols.hh"usingnamespaceli;intmain(){//创建PostgreSQL数据库连接pgsql_databasedb=pgsql_database(s::host="localhost"......
  • C++中的数组,字符串数组,pair数组
    1.C++中的字符串数组: 2.C++中的常量数组 这个constpair<int,string>valueSymbols[]定义了一个常量数组,数组中的每个元素都是一个pair<int,string>类型的对象。pair是C++标准模板库(STL)中的一个模板类,用于将两个值组合成一个单一的对象。在这个特定的例子中,pair的第一个......
  • C++入门教程:第八篇 - 文件I/O操作
    C++入门教程:第八篇-文件I/O操作文件I/O(输入/输出)是程序与外部存储设备进行数据交换的关键操作。在C++中,文件I/O操作由标准库提供的流类完成。通过这些流类,程序可以读写文件,处理文件内容。本文将介绍C++中的文件I/O基础,包括如何打开、读写和关闭文件。1.文件流基础C++提......
  • C++ 虚析构函数简单测试
    classBase{public:virtual~Base(){cout<<"~Base"<<'\n';}};classDerived:publicBase{public:~Derived(){cout<<"~Derived"<<'\n';}};intmain(){{......
  • 【C++】vector常见用法
    ......