递归中的参数

这篇博客探讨了递归中的参数处理,特别是如何在递归调用中使用全局变量。文章通过课堂练习和课后作业的形式,介绍了如何从1到n中选出m个数字,要求字典序正序输出所有方案,逐步递归实现。此外,还提供了进阶习题,涉及从特定数列中选取k个数的所有方案,进一步阐述递归算法的应用。
摘要由CSDN通过智能技术生成

递归中的参数

递归与全局变量

递归调用中,变量的作用域遵循普通函数调用。
在执行递归中,经常会遇到复杂的参数设置,其中某些参数始终保持不变,但被每一层递归使用,这个时候我们可以将其设置为全局变量。

如何构思递归

递归往往对应着问题转化,从计算斐波那契数列来看,将求解 F(n) 的问题,转化为了求解 F(n−1) 和 F(n−2) 的问题。
这两个分支分别进行递归处理。

课堂练习:选数字

从 1−>n 中选出 m 个数,要求同样的数字不能重复选择,按照字典序正序输出所有方案。
例如:从 1 到 4 中选出 2 个数,共有 6 种方法,按照字典序输出,依次为:
1 2
1 3
1 4
2 3
2 4
3 4

输入格式

输入共2个数n,m,中间用空格分隔。(1 <= m <= n <= 20)

输出格式

按照字典序正序输出所有方案。

输入样例

4 2

输出样例

1 2
1 3
1 4
2 3
2 4
3 4

数据范围

12% 2 <= n <= 5 1 <= m <= 5 56% 2 <= n <= 15 2 <= m <= 5 100% 2 <= n <= 20 2 <= m <= 17

样例解释

从 1 到 4 中选出 2 个数,共有 6 种方法,按照字典序输出,依次为:
1 2
1 3
1 4
2 3
2 4
3 4

程序1答案

#include<bits/stdc++.h>
using namespace std;
int m,n,s[20];
void ac(int a,int b){
   
	if(a==m){
   
		for(int k=0;k<m;k++){
   
			cout<<s[k]<<" ";
		}
		cout<<endl;
		return ;
	}
	e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值