斐波那契算法

一.非递归算法

   我们知道斐波那契数列0,1,1,2,3,5,8,13,21,34,55,........,其规律就是前两个数相加等于后面的第三个数,所以在写C语言的时候,必须有两个初始的数字a=0 b=1

那么第三个数字next=a+b,斐波那契数是数列,无穷无尽,为了输出指定的数列的个数,例如输出n个,那么就是循环n次,只要我们知道1次的规律,循环n次不

就是1乘n次么

     首先根据上面所说的我们需要使用C语言定义一些变量

int a=0,b=1,next;  /*初始的变量a,b和下一个数字next*/
    int i,n;           /*定义变量*/

      变量定义完成后,我们就研究下什么是快乐星球?不不不,是循环n次中的那个一次逻辑,为了输出数列,首先输出第一个元素,为了让你更好的理解,

这里打一个比喻,把输出的部分当作拆桥,产生的部分当作搭桥


printf("%d,",a);    /*输出第一个元素*/

         上述输出第一个元素了,后面的元素相当于拆掉了,那你必须前面铺一个元素,开始搭桥

next = a+b;  /*产生新的元素*/
a = b;       /*将b的值传递给a*/
b = next;    /*新的元素的值传递给b*/

       将上述代码使用for循环将1次循环为n次

#include <stdio.h>   /*C编程的标准IO输出输入头文件(预处理)*/


int main(){
    
    int a=0,b=1,next;  /*初始的变量a,b和下一个数字next*/
    int i,n;           /*定义变量*/ 
    
    /*===输入部分,控制n的值===*/
      printf("请输入输出的数列的个数:");
      scanf("%d",&n);
    
    for(i=0;i<=n;i++){
            /*=====循环中的一次经历的代码====*/
                printf("%d,",a);
                next = a+b;  /*产生新的元素*/
                a = b;       /*将b的值传递给a*/
                b = next;    /*新的元素的值传递给b*/ 
            /*=====循环中的一次经历的代码====*/
    }
    return 0;
     
}

二.递归算法

 什么是递归?什么是快乐星球,如果你想知道的话我这就带你研究;

       从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……'"

   递归,就是在运行的过程中调用自己!~,例如上面的故事,黑体的部分就是”本我“,利用自我实现超我的过程就是递归

 首先定义一个函数f(x),其实递归就是自我分解追溯自己的最初的根基,斐波那契的根基就是a =0,b=1,从后往前推的过程

int f(int i)
{
   if(i == 0)   /*第一个数字为返回1*/
   {
      return 0;
   }
   if(i == 1)  /*第二个数字为返回2*/ 
   {
      return 1;
   }
   return f(i-1) + f(i-2); /*第i个数为前两个数之和*/ 
}

下面就是循环过程了

int  main()
{
    int i;
    for (i = 0; i < 10; i++)
    {
       printf("%d\t\n", fibonaci(i));
    }
    return 0;
}

整体的可以运行的代码

#include <stdio.h>
 
int fibonaci(int i)
{
   if(i == 0)   /*第一个数字为返回1*/
   {
      return 0;
   }
   if(i == 1)  /*第二个数字为返回2*/ 
   {
      return 1;
   }
   return fibonaci(i-1) + fibonaci(i-2); /*第i个数为前两个数之和*/ 
}
 
int  main()
{
    int i;
    for (i = 0; i < 10; i++)
    {
       printf("%d\t\n", fibonaci(i));
    }
    return 0;
}

 

M54