什么是递归和迭代?递归和迭代要怎么用呢?

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]);
  }


 

希望这些东西可以帮到有需要帮助的人

大家可以在评论区里讨论 有时间的话我便会为大家解答疑难点!!!

要是觉得对你有帮助的话点个赞 听说( 收藏加关注的小哥哥小姐姐 今年会脱单噢)!!!🤭  

  

 

posted @ 2020-02-10 15:11  xxmeng  阅读(1475)  评论(1编辑  收藏  举报