函数递归---

文章提供了三个使用递归算法解决的数学问题:1.计算走台阶的不同方案,2.找出走方格的不同路径数量,3.生成排列组合。这些问题都限制了每次移动的步数,并要求按特定顺序(如字典序)输出结果。递归函数在每个问题中扮演关键角色,通过探索所有可能的下一步来找到所有解决方案。
摘要由CSDN通过智能技术生成

821. 跳台阶

一个楼梯共有 n 级台阶,每次可以走一级或者两级,问从第 0 级台阶走到第 n 级台阶一共有多少种方案。

输入格式

共一行,包含一个整数 n。

输出格式

共一行,包含一个整数,表示方案数。

数据范围

1≤n≤15

输入样例:
5
输出样例:
8
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int ans=0;
void f(int k)
{
    if(k==n) ans++;
    else if(k<n)
    {
    f(k+1);//当执行 ,f(k+1)时 ,就跳进新的f函数里头了 ,只有完成这一次函数,才会返回,然后执行f(k+2)
    f(k+2);
    }
}
int main()
{
    cin>>n;
    f(0);
    cout<<ans;
    return 0;
}

822. 走方格

给定一个 n×m 的方格阵,沿着方格的边线走,从左上角 (0,0) 开始,每次只能往右或者往下走一个单位距离,问走到右下角 (n,m) 一共有多少种不同的走法。

输入格式

共一行,包含两个整数 n 和 m。

输出格式

共一行,包含一个整数,表示走法数量。

数据范围

1≤n,m≤10

输入样例:
2 3
输出样例:
10
#include <iostream>
using namespace std;
int n,m,count=0;
int walk(int a,int b){
    if(a==n && b==m) return count++;
    else {
        if(a<n) walk(a+1,b);
        if(b<m) walk(a,b+1);
    }
}
int main(){
    cin>>n>>m;
    walk(0,0);
    cout<<count;
    return 0;
}

823. 排列

给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式

共一行,包含一个整数 n。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1≤n≤9

输入样例:
3
#include <iostream>
using namespace std;
int N=10;
int n;
void dfs(int u,int nums[],int st[]){
    if(u>n){
        for(int i=1;i<=n;i++) cout<<nums[i]<<' ';
        cout<<endl;
    }
    else{
        for(int i=1;i<=n;i++){
            if(!st[i]){
                nums[u]=i;
                st[i]=true;
                dfs(u+1,nums,st);
                st[i]=false;//恢复现场
            }
        }
        
    }
}
int main(){
    
    int nums[N];
    int st[N]={0};
    cin>>n;
    dfs(1,nums,st);
    return 0;
}
//或者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值