with cte(u_name,u_referess) as (select u_name,u_referess from userMember where u_referess = 'ceshi' union all select t.u_name,t.u_referess from userMember as t inner join cte as c on t.u_referess = c.u_name ) select COUNT(distinct u_name) from cte option (maxrecursion 9)

2个回答

sql server只能递归9层，用java/C#来写你的程序

qq_39464862 你看下我的方法是不是可行的？

qq_39464862 能给个具体的方法吗?(⊙o⊙)…

with cte(
u_name,u_referess,Level
)
as (
select u_name,u_referess,0 from b2ccms_userMember where u_referess = 'ceshi'
union all
select t.u_name,t.u_referess,c.Level+1 as Level from b2ccms_userMember
as t inner join
cte as c on t.u_referess = c.u_name and c.Level<8
)

我用的是加了一个字段Level，相当于是层数吧

转载：https://blog.csdn.net/3150379/article/details/54865603

C++ STL stack 的push方法会更改数据？
1、描述问题 昨晚写了个程序，功能是输入表达式，输出相应的二叉树的先序遍历结果。如 输入：a+b*(c-d)-e/f 输出：-+a*b-cd/ef 代码如下： ``` //main.cpp #include "iostream" #include "sstream" #include "string" #include "vector" #include <algorithm> #include "stack" #include "BiNode.h" using namespace std; int prior[7][7] = {{0,0,0,0,1,0}, {0,0,0,0,1,0}, {1,1,0,0,1,0}, {1,1,0,0,1,0}, {1,1,1,1,1,0}, {0,0,0,0,0,0}}; bool judgePriority(char a, char b); void preOrder(BiNode<char>* T); //不能在BiNode.h里面包含BiNode.cpp int main() { stack<char> op; stack<BiNode<char> > oprand; string expression; string str_op = "+-*/()"; string::iterator i; cin >> expression; int error_flag = 0; for(i = expression.begin(); i < expression.end(); i++) if(str_op.find(*i, 0) != string::npos){ if(!op.empty() && op.top() == '(' && *i == ')') op.pop(); else if(op.empty() || judgePriority(*i, op.top())) op.push(*i); else{ BiNode<char>* right = (&(oprand.top())); oprand.pop(); BiNode<char>* left = (&(oprand.top()));//new BiNode<char>(&(oprand.top())); oprand.pop(); BiNode<char>* node = new BiNode<char>(op.top(), left, right); op.pop(); // cout << node->getdata() << endl; // cout << node->getlchild()->getdata() << endl; // cout << node->getrchild()->getdata() << endl; oprand.push(*node); // cout << oprand.top().getdata() << endl; // cout << oprand.top().getlchild()->getdata() << endl; // cout << oprand.top().getrchild()->getdata() << endl; i--; } } else if(*i >= 'a' && *i <= 'z'){ BiNode<char>* node = new BiNode<char>(*i); oprand.push(*node); } else{ cout << "Illegal input." << endl; return 1; } // oprand.pop(); // oprand.pop(); // if(oprand.top().getlchild() == NULL) // cout << "a is NULL." << endl; // else // cout << oprand.top().getlchild()->getdata() << endl; while(!op.empty()) { if(oprand.size() < 2){ cout << "Illegal expression: Incorrect number of oprand or operator." << endl; error_flag = 1; break; } // cout << oprand.top().getdata() << endl; BiNode<char>* right = (&(oprand.top())); oprand.pop(); // cout << oprand.top().getdata() << endl; BiNode<char>* left = (&(oprand.top())); oprand.pop(); BiNode<char>* node = new BiNode<char>(op.top(), left, right); op.pop(); oprand.push(*node); // cout << oprand.top().getdata(); // cout << oprand.top().getlchild()->getdata() ; // cout << oprand.top().getrchild()->getdata() ; } // if(oprand.top().getlchild()->getlchild() == NULL) // cout << "a is NULL." << endl; // cout << (oprand.top().getlchild())->getdata() << endl; if(error_flag == 0) preOrder(&(oprand.top())); system("pause"); } void preOrder(BiNode<char>* T) { if(T == NULL) return ; cout << T->getdata(); preOrder(T->getlchild()); preOrder(T->getrchild()); // preOrder(T->getlchild()); } bool judgePriority(char a, char b){ string str_op = "+-*/()"; size_t pos1 = str_op.find(a,0); size_t pos2 = str_op.find(b,0); return prior[pos1][pos2]; } ``` ``` using namespace std; template<class T> class BiNode { public: BiNode(T elem){ data = elem; lchild = NULL; rchild = NULL; } BiNode(BiNode* b){ data = b->getdata(); lchild = b->getlchild(); rchild = b->getrchild(); } BiNode(T elem, BiNode* lchild, BiNode* rchild){ data = elem; this->lchild = lchild; this->rchild = rchild; } BiNode* getlchild(){ return lchild; } BiNode* getrchild(){ return rchild; } T getdata(){ return data; } // ~BiNode(); private: BiNode* lchild; BiNode* rchild; T data; }; ``` 发现一个现象，就是如果将代码里面所有地方的 ``` BiNode<char>* right = (&(oprand.top()))； ``` 和 ``` BiNode<char>* left = (&(oprand.top())); ``` 改成 ``` BiNode<char>* right = new BiNode<char>(&(oprand.top())); ``` 和 ``` BiNode<char>* left = new BiNode<char>(&(oprand.top())); ``` 就能输出正常。 可是如果不改，输出就会不正常。 经过逐步排错，我发现是下面这句出了问题： ``` oprand.push(*node); ``` 将代码中oprand.push(*node);上下三行的cout语句解注，可以发现，在执行push语句之前，输出为-cd 执行push语句之后，输出为--d。六句cout语句执行的结果贴图如下。 ![图片说明](https://img-ask.csdn.net/upload/201902/09/1549674232_723179.png) 想请高手解答为什么push之后lchild的data被修改了？ （注：贴图的内容是在调试下输出的结果，如果直接执行程序的话会无限输出。希望也能帮忙解决为什么递归无法终止的问题）

Java学习的正确打开方式

Elastic：菜鸟上手指南

Java知识体系最强总结(2020版)

Windows可谓是大多数人的生产力工具，集娱乐办公于一体，虽然在程序员这个群体中都说苹果是信仰，但是大部分不都是从Windows过来的，而且现在依然有很多的程序员用Windows。 所以，今天我就把我私藏的Windows必装的软件分享给大家，如果有一个你没有用过甚至没有听过，那你就赚了......，这可都是提升你幸福感的高效率生产力工具哦！ 走起！...... NO、1 ScreenToGif 屏幕，摄像头和

CPU对每个程序员来说，是个既熟悉又陌生的东西？ 如果你只知道CPU是中央处理器的话，那可能对你并没有什么用，那么作为程序员的我们，必须要搞懂的就是CPU这家伙是如何运行的，尤其要搞懂它里面的寄存器是怎么一回事，因为这将让你从底层明白程序的运行机制。 随我一起，来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说，我们首先就要搞明白它是怎么回事，也就是它的内部构造，当然，CPU那么牛的一个东
【综合篇】浏览器的工作原理：浏览器幕后揭秘
web（给达达前端加星标，提升前端技能） 了解浏览器是如何工作的，能够让你站在更高的角度去理解前端 浏览器的发展历程的三大路线，第一是应用程序web化，第二是web应用移动化，第三是web操作系统化。是不是有点不直白。 应用程序web化就是随着现在技术的发展，现在越来越多的应用转向了浏览器与服务器，就是B/S架构；web应用移动化，就是在移动设备应用，什么是移动设备呢。 “移动设备：

2020年1月17日，国家统计局发布了2019年国民经济报告，报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏，但是很多人并没有看到我国复杂的人口问题：老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧！ 更多有趣分析教程，扫描下方二维码关注vx公号「裸睡的猪」 即可查看！ 一、背景 1.人口突破14亿 2020年1月17日，国家统计局发布

B 站上有哪些很好的学习资源?

CSS操作之你不得不知的一些小技巧（一）ヾ(Ő∀Ő๑)ﾉ太棒了！！

Firebug 的年代，我是火狐（Mozilla Firefox）浏览器的死忠；但后来不知道为什么，该插件停止了开发，导致我不得不寻求一个新的网页开发工具。那段时间，不少人开始推荐 Chrome 浏览器，我想那就试试吧，期初我觉得用起来很别扭，毕竟我不是一个“喜新厌旧”的人。但用的次数越来越多，也就习惯了。 Chrome 浏览器有一个好处，就是插件极其丰富，只有你想不到的，没有你找不到的，这恐怕是...

Java程序员都需要懂的「反射」

Java第二周学习
Java第二周学习 1. 数组 1.1 定义数组格式 数据类型[] 数组名 = new 数据类型[容量]; int[] arr = new int[10]; 赋值左侧 数据类型: 告知编译器，当前数组中能够保存的数据类型到底是什么？并且在确定数据类型之后，整个数组中保存的数据类型无法修改！！！ []: 告知编译器这里定义的是一个数组类型数据。 明确告知编译器，数组名是一个【引用数据类型...

Java基础知识面试题（2020最新版）

Spring面试题（2020最新版）

C语言写个贪吃蛇游戏

7年加工作经验的程序员，从大厂跳槽出来，遭遇了什么？

Python3怎么处理Excel中的数据（xlrd、xlwt的使用方法）

python --图像处理基础