对于递归的理解

递归三部曲
1.确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

2.确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

3.确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

递归中的return常用来作为递归终止的条件,但是对于返回数值的情况,要搞明白它是怎么返回的。递归的方式就是自己调用自己,而在有返回值的函数中,上一层的函数还没执行完就调用下一层,因此,当达到递归终止条件时,首先return的是最底层调用的函数,return之后,继续执行上一层调用该函数之后的代码,此时我们看到的是上一层的情况,当上一层剩余的代码执行完之后,表示上一层的函数也结束,此时再返回上上一层,执行递归代码之后的代码,如此往复循环,直到返回到最上层,结束整个递归过程。需要注意的是,上一层执行递归之后的代码的时候,会调用下一层返回的值,也可以理解为在执行上一层代码的时候会调用下一层的实现过程,直到下一层执行完返回一个数值,然后再加上上一层的数值,就构成了上一层return的东西,如此往复。 下面介绍例子。

#include<iostream>
using namespace std;
//递归函数的参数和返回值
int Sum(int k){
    if(k==1)return 1;//终止条件
    return k+Sum(k-1);//单层递归的逻辑
}
int main() {
    int k=100;
    cout<<Sum(k)<<endl;
}

上面是一个递归求和的代码,例如我们传参100进去,第一次执行到#3位置的时候,调用Sum(99),此时Sum(100)还没有执行完,就已经开始执行Sum(99)了,Sum(100)要等待Sum(99)执行完后才开始执行自己未执行完的程序。同理当Sum(99)执行到#3位置的时候,也会调用Sum(98),此时Sum(99)还没有执行完,Sum(99)要等到Sum(98)执行完之后才开始执行自己未执行完的程序…就这样一直循环到n=1的时候,也就是在执行Sum(1)的时候满足递归结束条件,即return 1;这个时候表示Sum(1)已经执行完毕,接下来要执行Sum(2)中未执行完的内容,也就是return 2+Sum(1);而Sum(1)已经返回1,因此Sum(2)返回2+1=3,Sum(2)执行完毕,开始执行Sum(3)未执行完的内容…如此往复,一直到Sum(99)执行完毕后,再执行Sum(100)中未执行完的内容,也就是return 100+Sum(99),而Sum(99)已经执行完毕,有返回值,因此Sum(100)=100+Sum(99)=5050。至此,整个递归过程结束,返回累加值。

上面的代码案例给的是有返回值的递归函数版本,无返回值的递归函数版本如下:

#include<iostream>
using namespace std;
int sum=0;//需要设定一个全局变量
//递归函数的参数和返回值
void Sum(int k){
    //终止条件
    if(k==0)return;
    //单层递归的逻辑
    Sum(k-1);
    sum+=k;
}
int main() {
    int k=100;
    Sum(k);
    cout<<sum<<endl;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
归是一种在函数定义中调用自身的过程。它包括两个主要过程:去和回归。去是指函数不断调用自身去解决更小规模的问题,直到达到某个基本情况。回归是指在基本情况下,函数开始返回结果,并依次回归到之前的调用处,解决更大规模的问题。通过这种方式,归能够解决很多问题,并且在某些情况下,比迭代更简洁和直观。 在Python中,归函数主要由两个部分组成:基本情况和归调用。基本情况是指函数停止归的条件,通常是一个简单的问题,可以直接返回结果。归调用是指函数在解决更小规模问题后,再次调用自身来解决剩余的问题。 例如,下面是一个简单的归函数的示例,用于计算一个数的阶乘: ```python def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) ``` 在这个例子中,当n等于0时,函数返回1作为基本情况。否则,函数调用自身来计算n-1的阶乘,并将结果乘以n,最终返回阶乘结果。 对于理解归,有几个重要的概念需要注意: 1. 归函数必须有一个或多个基本情况,以避免进入无限归的循环。 2. 每次归调用应该是为了解决一个更小规模的问题。 3. 归函数应该能够在某个条件下停止归。 归在算法和编程中起着重要的作用,可以用于解决许多问题,如排序、搜索、树的遍历等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值