排序算法五:什么是递归

什么是递归

  • 一、递归与迭代
    • 递归图例:
    • 1、定义
    • 1.1、递归
    • 1.2、迭代
    • 2、构成递归需具备的条件
    • 3、递归与迭代(循环)的区别与联系:
    • 4、递归与迭代(循环)的优缺点:
      • 4.1、递归
        • 优:
        • 缺:
      • 4.1、迭代(循环)
        • 优:
        • 缺:
  • 二、代码
    • 1、递归(无终止条件)
    • 2、递归
    • 3、迭代(循环)

一、递归与迭代

递归图例:

排序算法五:什么是递归_第1张图片

1、定义

1.1、递归

就是在运行的过程中自己反复调用自己,每次旨在缩小问题规模。如果不加条件进行控制就成为死循环。

1.2、迭代

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程

2、构成递归需具备的条件

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口(判断条件),化简为非递归状况处理。

3、递归与迭代(循环)的区别与联系:

1、从概念上讲,递归就是指程序调用自身的编程思想,即一个函数调用本身;
迭代是利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想。

2、简单地说,递归是重复调用函数自身实现循环。
迭代是函数内某段代码实现循环,

3、迭代普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。

4、递归普通循环的区别是:循环是有去无回,而递归则是有去有回(因为存在终止条件)。
在循环的次数较大的时候,迭代的效率明显高于递归。

5、任何能使用递归解决的问题都能用迭代(循环)的方法来解决,

6、迭代使用的是循环结构,递归使用的是选择结构。

4、递归与迭代(循环)的优缺点:

4.1、递归

5! = 5 x 4 x 3 x 2 x 1

n ! = n x ( n - 1 )
5 ! = 5 x 4 ! (暂存)
4 ! = 4 x 3 ! (暂存)
3 ! = 3 x 2 ! (暂存)
2 ! = 2 x 1 ! (暂存)
1 ! = 1 x 0 ! (暂存)
0 ! = 1

优:

递归能够是程序的设计结构更清晰、更简洁、更容易让人理解

缺:

大量的递归调用会耗费大量的时间和大量的内存,换言之,递归有时候会慢一些,而且占用的内存会多一些(所有的中间结果都要”暂存“)
而且每次递归都会建立函数的副本,占用大量的内存空间

4.1、迭代(循环)

优:

普通的迭代(循环)是不需要占用额外的内存的

缺:

会使程序的设计结构繁杂,

二、代码

1、递归(无终止条件)

#include 

using namespace std;

void TellStory(){		//死循环,无终止条件
    cout<<"从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事:"<

结果:

	从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事:
	从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事:
	从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事:
	从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事:
	从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事:	
	从前有座山,山上有座庙,庙里有个老和尚在给小和尚讲故事:
	。。。。。(一直打印)

2、递归

#include 

using namespace std;

int JieChengDiGui(int n){
    if(n==0){
        return 1;
    }
    return n*JieChengDiGui(n-1);
}

int main()
{
    cout<<"递归:"<#include 

using namespace std;

int JieChengDieDai(int n){
    int result = 1;
    for(int i = n;i>0;i--){
        result*=i;
    }
    return result;
}

int main()
{
    cout<<"迭代:"<

你可能感兴趣的:(数据结构--C++描述,c++)