#include "stdio.h"
#include <string.h>
//递归:二分查找
int BinaryFind(int* arr, int left, int right, int value)
{
int pos = -1;
if(arr == NULL || left < 0 || right < left )
{
return pos;
}
else
{
int mid = (left + right) / 2;
if(arr[mid] > value)//=value结束
{
return BinaryFind(arr, left, mid - 1, value);
}
else if(arr[mid] < value)
{
return BinaryFind(arr, mid + 1, right, value);
}
else
{
pos = mid;
}
return pos;
}
}
//二分查找(非递归)
int BinaryFind(int* arr, int len, int value)
{
int pos = -1;
if(arr == NULL || len <= 0)
{
return pos;
}
int left = 0;
int right = len - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if(arr[mid] > value)
{
right = mid - 1;
}
else if(arr[mid] < value)
{
left = mid + 1;
}
else
{
pos = mid;
break;
}
}
return pos;
}
//n的阶乘
int Mul_N(int n)
{
if(n == 1 || n == 2)
{
return n;
}
//关系式
return n * Mul_N(n - 1);
}
//查找一个值
int FindValue(int* arr, int len, int value)
{
int pos = -1;
if(arr == NULL || len < 1)
return pos;
else if(arr[len - 1] == value)
{
pos = len - 1;
}
else
{
return FindValue(arr, len - 1, value);
}
}
//非递归:斐波那契数列求第n项
int FiBo1(int n)
{
if(n < 1)
return -1;
if(n < 3)
{
return 1;
}
int a = 1;
int b = 1;
int c = 1;
for(int i = 3; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}
//递归:计算斐波那契数列第n项 fibonacci:f(0)=0;f(1)=1;f(n)=f(n-1)+f(n-2)
int FiBo2(int n)
{
if(n < 1)
{
return 0;
}
if(n < 2)
{
return 1;
}
else
{
return FiBo2(n - 1) + FiBo2(n - 2);
}
}
int main()
{int arr[]={1,3,4,6,7,8};
int p1=BinaryFind( arr, 1, 8, 3);
printf("%d\n",p1);
int p2=BinaryFind(arr, 6,3);
printf("%d\n",p2);
int m1=Mul_N(4);
printf("%d\n",m1);
int m2=FiBo1(5);
printf("%d\n",m2);
}