草庐IT

递归图

全部标签

c++ - 递归模板不能像预期的那样使用静态变量

代码#includeusingnamespacestd;templatestructFibo{staticintx;};templateintFibo::x=1;templateintFibo::x=1;templateintFibo::x=Fibo::x+Fibo::x;//markedlineintmain(){cout::x::x::x::x::x::x输出001211在VC++中。(根据用户MM.它在gcc中按预期编译)。当编译器到达带有n=5的标记行时它不会为n=4再次编译同一行,但只是对待Fibo::x就好像它是用声明的一样templateintFibo::x;//xdef

python - C++ 中的递归生成器

我有一个大小为N的vector,其中每个元素i的值可以从0到possible_values[i]-1。我想做一个函数来遍历所有这些值。我能够使用递归生成器在Python中做到这一点:defall_values(size,values,pos=0):ifpos==size:yield[]else:forvinxrange(values[pos]):forv2inall_values(size,values,pos+1):v2.insert(0,v)yieldv2possible_values=[3,2,2]forvinall_values(3,possible_values):print

c++ - 递归 noexcept 规范

用g++4.9和clang3.4测试,为什么这段代码不能编译:namespace{templateconstexprautof(T&&t)noexcept{returntrue;}templateconstexprautof(T&&t,Ts&&...ts)noexcept(noexcept(f(ts...))){returnf(ts...);}}//namespaceintmain(){f(true,0,5u);}但这段代码确实:namespace{templateconstexprautof(T&&t)noexcept{returntrue;}templateconstexpraut

C语言第十四弹---函数递归

  ✨个人主页: 熬夜学编程的小林💗系列专栏: 【C语言详解】 【数据结构详解】函数递归1、递归是什么?1.1、递归的思想1.2、递归的限制条件2、递归举例2.1、举例1:求n的阶乘2.1.1、分析和代码实现2.1.2、画图推演2.2、举例2:顺序打印⼀个整数的每⼀位2.2.1、分析和代码实现2.2.2、画图推演3、递归与迭代3.1、举例3:求第n个斐波那契数总结1、递归是什么?递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢?递归其实是⼀种解决问题的⽅法,在C语言中,递归就是函数自己调⽤自己。写⼀个史上最简单的C语⾔递归代码:#includeintmain(){printf("hehe\

c++ - 我如何让这个递归规则起作用?

我想解析(首先,只识别,保留符号)LaTeX数学。现在,我遇到了super和下标的问题,结合花括号(例如a^{bc}及其组合,我有基本的a^b工作正常)。一个最小的例子(尽可能短,同时保持可读性):#includeusingstd::cout;#includeusingstd::string;#includenamespacex3=boost::spirit::x3;usingx3::space;usingx3::char_;usingx3::lit;usingx3::repeat;x3::rulescripts="super-andsubscripts";x3::rulebraced

C++递归实现不带头节点的单链表操作

有一个不带头结点的单链表:递归实现以下操作(强调:所有操作必须用递归完成)。1,插入数据:13,15,8,4,8,3,4,8(可以用递归一次完成,也可以用递归将一个一维数组一个一个的尾部插入)2,正向输出所有节点值3,逆向输出所有节点值4,输出单链表中数据结点个数5,输出第k个节点的值(k由用户输入,要能给出错误情况)6,在第k个位置上插入e元素。(k和e由用户输入,要能给出错误情况)7,正向输出所有节点值8,删除第k个结点(k由用户输入,要能给出错误情况)9,正向输出所有节点值10,删除值为X的数据结点(测试值为:8)11,正向输出所有节点值12,删除所有值为X的数据结点(测试值为:4)13

c++ - 递归 lambda 的 Typedef

有没有一种方法可以创建一个typedef以便编译以下内容(y组合器的基本“纯”实现)?typedef???f;[](fx){x(x);}([](fx){x(x);});这具有创建“递归lambda”的效果,即通过使用第二个lambda来获取对自身的引用来调用自身。第一个lambda中的x是对第二个lambda的引用,因此x(x)使用对自身的引用调用第二个lambda。此后,第二个lambda通过调用x(x)递归。这段代码在执行时应该会产生一个无限循环,直到遇到堆栈溢出。第二个函数的更复杂的实现可以产生任意递归行为。我尝试过typedefing各种版本的void(*)(...)但我不相信

c++ - 无限递归 `enable_if`

在尝试为另一种类型T编写wrapper类型时,我遇到了一个相当令人讨厌的问题:我想定义一些二元运算符(例如+)将wrapper上的任何操作转发给底层类型,但我需要这些运算符接受任何涉及wrapper的潜在组合:wrapper()+wrapper()wrapper()+T()T()+wrapper()天真的方法涉及直接编写所有潜在的重载。但我不喜欢编写重复的代码并且想要更多的挑战,所以我选择使用一个非常通用的模板来实现它并使用enable_if限制潜在的类型。我的尝试显示在问题的底部(抱歉,这是我能想到的最小值)。问题是它会遇到无限递归错误:为了评估test()+test(),编译会查看

c++ - 递归嵌套模板——gcc 错误?

我有以下片段。templatestructf{templatestructa:f{};};intmain(){f::a::ax;}它在GCC4.4.5和MSVC2010上编译时没有警告,但在GCC4.5.2上却没有——我收到以下错误:test.cc:Infunction'intmain()':test.cc:11:21:error:expectedprimary-expressionbefore'double'test.cc:11:21:error:expected';'before'double'所以虽然我没有看到任何关于它的非标准,但问题是强制性的——这在C++中合法吗?另外,如果

c++ - 启用 c++11 时 c++ 递归模板的奇怪行为

我试图理解我收到的一些递归C++模板代码,但遇到了一些奇怪的行为。出于某种原因,编译器似乎能够在编译时添加两个值,但必须在运行时进行左移。即便如此,只有当我尝试在启用c++11的情况下进行构建时才会出现问题。代码(我已经归结,你稍后会看到)定义了两对模板——一对名为shft和shft_aux和一对名为add和add_aux递归生成它们自己。顺便说一句,add模板不应该有用,它的唯一目的是演示问题,而不是生成实际的min值。如果我在没有命令行参数的情况下编译这段代码,它编译得很好。但是,如果我指定-std=c++11-stdlib=libc++,add_aux上的static_asser