提示:加上一个递归的编程实例题
前言
递归之前是很懵的,今天搞了个编程例子,慢慢加深理解吧。
一、递归
编程实例
1.例子1
代码如下(示例):
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
void getDataNum(int data)
{
int num = 0;
if(data != 0)
{
num = data % 10;
data = data / 10;
printf("%d ",num);
getDataNum(data);
}
return;
}
int main()
{
int dat = 125;
getDataNum(dat);
cout << "Hello world!" << endl;
return 0;
}
打印结果5 1 2
已经不知道这个代码是哪里来的了,不过应该是从其他地方拷贝过来的。
因为这两天我看了下《C和指针》递归的章节,里面提到了上述代码的例子。
2024年9月13日14:26:42
《C和指针》Page130
里面提到了计算阶乘和斐波那契数列都不是递归的最优解,上述代码例子才是递归的最佳用法。
确实,尤其是计算斐波那契数列非常消耗栈资源。
一、递归与迭代的区别与关系
递归与迭代的关系
1、例子
写一个迭代和递归的例子:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
//迭代
int caculateFactorial(int n)
{
int total = 1;
while(n)
{
total = total * n;
n--;
}
return total;
}
//递归
int caculateFactorialByRecursion(int n)
{
int total = 1;
if(n == 1)
{
return 1;
}
else
{
total = n * caculateFactorialByRecursion(n - 1);
}
return total;
}
//error
//int caculateFactorialByRecursion(int n)
//{
// int total = 1;
// if(n == 1)
// {
// return 1;
// }
// else
// {
// total = total * caculateFactorialByRecursion(n);
// n--;
// }
// return total;
//}
int main()
{
int data = caculateFactorial(5);
printf("%d\n",data);
int dataByRecursion = caculateFactorialByRecursion(5);
printf("%d\n",dataByRecursion);
cout << "Hello world!" << endl;
return 0;
}
下面开始看一些知识点:
1、迭代
基本概念
迭代(iteration)是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。 每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
确定迭代变量
建立迭代关系式
对迭代过程进行控制
2、递归
基本概念
程序调用自身的编程技巧称为递归( recursion)。递归算法是一种直接或者间接调用自身函数或者方法的算法,它实质上是把一个大型复杂的原问题拆分成具有相同性质的子问题来求解。
递归至少满足以下两个条件:
- 在过程或函数内调用自身;
- 必须有一个明确的递归终止条件。
那么计算5!
时程序的执行过程如下:
factorial(5)
factorial(4)
factorial(3)
factorial(2)
factorial(1)
return 1
return 2*1 = 2
return 3*2 = 6
return 4*6 = 24
return 5*24 = 120
二、后续
之前有段时间还很迷糊递归和迭代的区别,重新看了个书籍和这篇帖子又加深了理解一些。
还需要完善一下,迭代替代递归计算斐波那契数列的代码
后续可以再补充
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。