判断元素是否存在———递归

题目链接
蒜头君有一个集合 MM 是这样生成的:

(1) 已知 kk 是集合 MM 的元素;
(2) 如果 yy 是 MM 的元素,那么,2y+12y+1 和 3y+13y+1 都是 MM 的元素;
(3) 除了上述二种情况外,没有别的数能够成为 MM 的一个元素。
问题:给定 kk 和 xx(0 \le k \le x \le 10^50≤k≤x≤10
5
),请判断 xx 是否是 MM 的元素。

如果是,则输出"YES",否则,输出"NO"。

输入格式
输入整数 kk 和 xx,逗号间隔。

输出格式
如果是,则输出"YES",否则,输出"NO"。

输出时每行末尾的多余空格,不影响答案正确性

样例输入
0,22
样例输出
YES

#include 
#include 
#include 
#include 
#include 
using namespace std;
int k,x;
bool judge(int n)
{
     
    if(n>x)
        return false;
    if(n==x)
        return true;
    if(judge(2*n+1)||judge(3*n+1))
        return true;
    return false;
}
int main()
{
     
    char c;
    cin>>k>>c>>x;
    int n=k;
    bool f=judge(n);
    if(f==true)
       cout<<"YES"<<endl;
    else
       cout<<"NO"<<endl;
}

你可能感兴趣的:(算法,递归)