有人可以用例子解释递归如何与 while 循环一起工作吗?我无法理解流程
Can someone explain with example how recursion works with while loop?? I cant understand the flow
如果递归函数内部有一个while循环,一旦调用该函数,循环会退出吗?
void RecFunction(something){
cout<<"print somethingn";
while(somecondition)
{
RecFuntion(something)
}
}
假设对RecFunction
的调用是对其他某个函数的调用;我想你不会有问题看到这将如何工作。 (如果你这样做了,请在尝试解决递归之前解决这个问题。 即使另一个函数的主体与RecFunction
函数的主体相同,逻辑也是相同的:你以前不需要知道该函数的内部工作原理,所以没关系。
你可以把递归调用看作是:对某个函数的调用,它恰好与调用的函数具有相同的名称和主体,但在其他方面完全不同(它有自己的参数、局部变量等)。
第一次
调用RecFunction
并遇到while循环时,只要somecondition
true
,您的代码就会一次又一次地调用RecFunction
。对RecFunction
的递归调用中的每一个还包括一个 while 循环,该循环将生成越来越多的对同一函数的递归调用,每个函数都包含一个将生成 ...等。。如果始终true
some condition
则代码将生成无限数量的函数调用。
此代码:
void RecFunction(int something) {
std::cout<<something ;
while(true)
RecFunction(something);
}
int main() {
RecFunction(10);
return 0;
}
用 clang 编译的结果是:
## ....
LBB0_1: ## =>This Inner Loop Header: Depth=1
movl -4(%rbp), %edi
callq __Z11RecFunctioni
jmp LBB0_1
## ....
(将值移动到寄存器,调用RecFunction,永远重复最后两个步骤)
当然,最终会崩溃..
@Marinos K 是正确的。基本上,正在运行的最内层循环将继续运行,直到满足正确的条件。这包括嵌入在循环中的子例程调用。确保您的"for"和"while"循环按计数或超时终止,以防在合理的时间内未满足适当的条件。它可能会返回错误代码,但至少您的程序不会挂起。代码越复杂,错误处理程序就越复杂。他们可以帮助指出反应迟钝或不合理的条件。
相关文章:
- 如何使我的 sizeof sum 结构与空参数包一起工作
- SFINAE:它如何与派生类一起工作?
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 尝试让条形码扫描仪与Arduino一起工作
- 从书本中学习C++无法使该程序与类一起工作
- 让类与运算符一起工作更简单的方法
- 如何使lambda与std::nullopt一起工作
- 当我使用长整型时,我的代码不起作用,它与 int 一起工作得很好
- 返回对象如何与分配运算符一起工作
- GLM :: perspective()和glm :: lookat()一起工作
- 如何与朋友操作员一起在链表下面工作
- SFML OpenGL:如何同时与他们一起工作
- 使QTConcurrent ::映射与Lambdas一起工作
- 如何与C 字符串中的非ASCII字符一起工作
- 我如何适应擦除式习惯与矢量元组一起工作
- 需要帮助使 VOID 代码与总工资一起工作
- 我怎样才能让这个刽子手代码与 wxDev-C++ 一起工作
- Googletest 在 bazel test 中永远不会失败(在它应该失败的地方),但与 cmake & clion 一起工作
- 常量变量初始化仅与成员初始化列表一起工作
- feal_ptr与unique_ptr一起工作