有人可以用例子解释递归如何与 while 循环一起工作吗?我无法理解流程

Can someone explain with example how recursion works with while loop?? I cant understand the flow

本文关键字:工作 一起 循环 while 解释 递归      更新时间:2023-10-16

如果递归函数内部有一个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"循环按计数或超时终止,以防在合理的时间内未满足适当的条件。它可能会返回错误代码,但至少您的程序不会挂起。代码越复杂,错误处理程序就越复杂。他们可以帮助指出反应迟钝或不合理的条件。