如何有效地制作升序序列

How to effectively make ascending sequences?

本文关键字:升序 有效地      更新时间:2023-10-16

我目前正在尝试制作一个涉及升序序列的程序。N为序列的大小,K为最大值,例如

输入:2,3

输出:6 (1,1 - 1,2 - 1,3 - 2,2 - 2,3 - 3,3)

我当前的代码输出的不是6而是3。我知道这可能不是求序列数量的方法。在我看来,这个递归有问题。你能帮我找到问题并解决吗?

#include<iostream>
using namespace std;
long long n,k,cnt=0;
long long seq(long long n, long long k, long long first){
   if(n==first){
       return cnt;
   }
   for(long long i=first;i<=k;i++){
        cnt = cnt + 1;
   }
   return seq(n,k,first+1);
}
int main()
{
    long long n,k;
    cin>>n>>k;
    cout<<seq(n,k,1);
    return 0;
}

对于给定的n和k

long long seq(long long n, long long k,long long first,long long depth){
   if(depth > n){
       cnt = cnt + 1; // A leaf node is hit in the recursion tree
       return cnt;
   }
   else {
       for(long long i= first;i<=k;i++){    
            seq(n,k,i,depth+1); // Continue recursion
       }
   }
   return cnt;
}
int main()
{
    long long n,k;
    cin>>n>>k;
    cout<<seq(n,k,1,1);
    return 0;
}

运行代码:http://cpp.sh/4xr7a