学习笔记—递归

来源:互联网 发布:c语言中多个if else 编辑:程序博客网 时间:2024/05/20 12:50

PS:前几天在蓝桥杯选拔的时候碰到一题用递归的题目,但因为太久没回顾都忘了,所以在这里用自己能理解的话简单记录一下。


递归算法

定义  

直接或间接的调用该函数本身;

int f(int x){    int y,z;    x=f(y);    return (2*x);}


步骤   

(1)“回溯”

确定关系,必定存在从某一项开始,前一项和后一项之间有存在一种关系;
     按照这个关系,把所有项遍历确定关系。

(2)“递推”

确定目标(所求的点)后,采用 递推 的方法 得到目标点。


注意

递归过程不是无限制的,必须有一个结束递归过程的条件。


例子分析

五个人,第五个比第四个大两岁,第四个比第三个大两岁,第三个比第二个大两岁,第二个比第一个大两岁,第一个十岁。


         关系:    age(5)=age(4)+2

age(4)=age(3)+2

age(3)=age(2)+2

age(2)=age(1)+2

age(1)=10


age(n)=10 (n=1)

age(n)=age(n-1)+2 (n>1)


则可以看出目标边界为5,确定的出发点为1。

从1 递推 到5可根据关系确定所有人的值。

#include<iostream>using namespace std;int main(){    int age(int);    int n=5;    cout<<"no.5 number is:"<<age(5)<<endl;    return 0;}int age(int n);       //递归函数{    int c;    if(n==1)          //如果n=1       c=10;          //值确定(结束的条件)不再调用自己,    else       c=age(n-1)+2;//递归再次调用自己,减到n=1(确定的边界)时递推回结果       return(c);//返回需要的值}


在代码中,开始是age(5),函数被调用了5次,age(5),age(4),age(3),age(2),age(1),其中age(5)是main调用的,其他是在age中被调用,即递归了四次。

在某一次调用age函数的时候不是立即得到age(n)的值,而是一次又一次地进行递归调用,到age(1)时才有确定的值,再往回递推出age(2),age(3),age(4),age(5)。

注意  age(1)的值是确定的,当n=1时,执行 “c=10” ,即不再调用age函数,递归调用结束。再把10作为age(1)的值返回age函数重新递推。


               

                

原创粉丝点击