3.递归-给定正整数n(项数),返回响应的斐波那契数值

#include <stdio.h>
unsigned int Loop_Fibonacci(unsigned int n);
unsigned int Recu_Fibonacci(unsigned int n);
int main()
{
   
  //给定正整数n(项数),返回响应的斐波那契数值
  //斐波那契额数列(1、1、2、3、5、8、13...)
  int n = 30;
  printf("循环实现:%u\n", Loop_Fibonacci(n) );
  printf("递归实现:%u\n", Recu_Fibonacci(n) );


    return 0;
}
//循环实现
/*
n1 = 1
n2 = 1
n3 = n1 + n2 = 2

n1 = n2 1
n2 = n3 2
n3 = n1 + n2 = 3

n1 = n2 = 2
n2 = n3 = 3
n3 = n1 + n2
*/
unsigned int Loop_Fibonacci(unsigned int n)
{
  int a1 = 1;
  int a2 = 1;
  
  if( n <= 2 )
  {
      return 1;

  }else{

      int n1 = a1;
      int n2 = a2;
      int n3 = n1 + n2;

      for (int i = 4; i <= n; ++i)
      {
          n1 = n2;
          n2 = n3;
          n3 = n1 + n2;
          //printf("%d\n", n3);
      }

      return n3;

  } 
  }  
//递归实现
/*
1
1
2
3
5
8
13
*/  
unsigned int Recu_Fibonacci(unsigned int n)
{
  return n<=2 ? 1 : Recu_Fibonacci(n -1) + Recu_Fibonacci(n -2);
}   

 

posted @ 2021-06-28 11:15  学而不思则罔!  阅读(99)  评论(0)    收藏  举报