目录
1.什么是递归?
2.加深理解递归
3.递归例题练习
4.递归与迭代的相互转换
1.什么是递归?
递归就是c语言里面的函数自己调用自己的过程就简称为递归
例子 n的阶乘
#include<stdio.h>
int fact(int n)
{
if (n > 0)
return n * fact(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int m = fact(n);
printf("%d", m);
return 0;
}
这里我们就是用函数fact自己调用自己这个过程就成为递归但是递归必须有自己的结束条件在这里n>0就是这里的结束条件要不然会一直递归
2.加深理解递归
根据上面那个例子求n的阶乘对于n的基本要求是这样的
所以递归分为两个阶段递推和回归
3.递归例题练习
题目
顺序打印一个数的每一位数
输入
1234
输出
1 2 3 4
#include<stdio.h>
void fact(int n)
{
if (n >= 10)
{
fact(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int n = 0;
scanf("%d", &n);
fact(n);
return 0;
}
可能有人不理解为什么直接就写一个printf就可以因为为这个函数的话if语句里面是一个递归调用自己首先进入函数里面1234进入变成了123上面还没有结束继续在if里面只有等n变成1的时候才会不符合n>=10的条件跳过if进入下面开始输出由于最开始是1所以打印的是1 2 3 4
例题 斐波那契数列
看到这个很容易就会想到递归写这个题目
#include<stdio.h>
int fib(int n)
{
if (n > 2)
{
return fib(n - 1) + fib(n - 2);
}
else
return 1;
}
int main()
{
int n = 0;
scanf("%d", &n);
int m = fib(n);
printf("%d", m);
return 0;
}
4.递归与迭代的相互转换
首先迭代就是像累乘累加一样的逐个计算的过程称为迭代
例如上面那个斐波那契数列如何用给递归转换为迭代呢下面为大家讲解一下
这里让里面的数不断进行交换c=a+b;a=b;b=c;这样交换就实现用迭代写斐波那契数列
#include<stdio.h>
int fib(int n)
{
int a = 1, b = 1, c = 1;
while (n >= 3)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int m = fib(n);
printf("%d", m);
return 0;
}
这就是我学的知识希望可以帮到大家