什么是递归和迭代?递归和迭代要怎么用呢?
2020-02-08
作为初学者的你是否对递推这个概念感觉到烧脑呢!你有没有过会这个时候,就是你感觉你这个是理解了,但是到代码中就是满头的雾水呢!我当初就是这样子,后来我慢慢理解了,我把我对这个概念理解的写在这里希望可以给各位初学者一些帮助,这是我第一次写博客有些不好的地方大家可以提出来!!!!!!!!
一.递归的定义:如果一个对象部分的由自己组成或按照他自己定义,则我们就把他成为递归。(简单的来说,就是反复的调用自己)
二.递归函数:书上说的很复杂,我理解的就是一个函数在定义中循环并解决问题的,将复杂的问题给简单化了。
比如说3! 3!=3*2! 2!=2*1!1!=1 这个例子就是一直在调用 ,反复的在调用 知道调用到1!时候,递归停止。最后再从每一步递归掉用返回去1 1!*2 2!*3
**************
递归和迭代的区别
1:递归是一直调用直到递归到满足那个条件为指 ,不可以无限制的调用自己,必须有个出口 迭代则是如果那个条件为假不满足的情况下,他就终止了
2:递归有一个缺点就是虽然他将复杂的问题给简单化了,但是他却消耗了大量的内存与时间,
输入的值过大时她算的很慢 ,因为需要每次都把前面的算一遍 迭代法相比较来说就比较省时间,但就是有一点难理解 存在一个由旧值不断推送给新值的变量
例如这个例子就是对递归概念的进一步解释
#include <stdio.h>
int main() //函数的主函数也就是main()函数
{
int a,b; //首先调用这一层的函数
{
int x,y; //其次是这一层函数
{
int z;
}
}
三.常见的有关递归的编程
一.斐波那契数列 1 1 2 3 5 8 ........
通过观察可得前2项不变 从第3项(算第三项)起后面的数等于前面两个数之和 f(n)=f(n-1)+f(n-2)
1.递归法
long Fib(int n)
{ if(n==0)
return 0;
else if(n==1)
return1;
else
return (Fib(n-1)+Fib(n-2));
}
2.迭代法
int f0,f1,Fib,n;//上面有一段main()函数
int j;
long Fib(int n)//函数的定义
if(n==0)
{
return 0
{
else if (n==1)
{
return 1
}
for(n=1;n< j;n++)
{
Fib=f0+f1;
f0=f1;
f1=Fib;
}
二.递归母羊
/*有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。
请编程实现在第n年的时候,共有多少头母牛?*/
/*输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。*/
/*对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。*/
/*第一年是一头母牛
从第二年起母牛开始产生小母牛
小母牛从第四年开始产生变成大母牛并产生小母牛
先算出前七年的年数与母牛数比较(此时找规律)
你会发现从第四年起,每一年的母牛数=前一年的+前三年的*/
# include<stdio.h>
int main()
{
void fun(int n);
int a[55];
int i=0,j;
scanf("%d",&a[i]);
while(a[i]!=0)
{
i++;
scanf("%d",&a[i]);
}
for(j=0;j<i;j++)
{
if(a[j]<=3)
printf("%d\n",a[j]);
else
fun(a[j]);
}
return 0;
}
void fun(int n)
{
int b[55],i;
for(i=0;i<3;i++)
b[i]=i+1;
for(i=3;i<55;i++)
b[i]=b[i-1]+b[i-3];
printf("%d\n",b[n-1]);
}
希望这些东西可以帮到有需要帮助的人
大家可以在评论区里讨论 有时间的话我便会为大家解答疑难点!!!
要是觉得对你有帮助的话点个赞 听说( 收藏加关注的小哥哥小姐姐 今年会脱单噢)!!!🤭