#include<iostream>
using namespace std;
void doA()
{
cout << "hello" << endl;
doA();
}
void story()
{
cout << "从前有座山,山上有座庙,庙里有个小和尚,老和尚在给小和尚讲故事" << endl;
story() ;
}
//n! = n * (n - 1)! 阶乘 使用递归
long mulity(int n)
{
if(n == 0) //设定条件,让循环结束
{
return 1;
}
else
return n * mulity(n - 1);
}
//任何能使用递归解决的问题,都能使用迭代解决
long mulity2(int n)
{
long result = 1;
for(int i = n; i > 0; i--)
{
result = result * i;
}
return result;
}
//迭代 二分查找
int BinarySearch_Iteration(int *array, const int num, const int k)
{
int left = 0, right = num - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if(k < array[mid])
right = mid - 1;
else if(k > array[mid])
left = mid + 1;
else
return mid;
}
return -1;
}
//递归 二分查找
int BinarySearch_Recursion(int *array, const int k, int left, int right)
{
if(left < right)
{
int mid = (left + right) / 2;
if(k < array[mid])
return BinarySearch_Recursion(array, k, left, mid - 1);
else if(k > array[mid])
return BinarySearch_Recursion(array, k, mid + 1, right);
else
return mid;
}
return -1;
}
int main()
{
/***********************递归的基本用法**********************/
//doA();
//story();
//long ret = mulity(5);
//cout << ret << endl;
// for(int num = 0; num < 10; num++)
// {
// cout << "递归:" << num << " != " << mulity(num) << endl;
// cout << "迭代:" << num << " != " << mulity2(num) << endl;
// }
/***********************递归的折半查找**********************/
int array[] = {1, 2, 3 ,4, 5, 6, 7, 8} ;
int num = 7;
int ret = BinarySearch_Recursion(array, num, 0, 8);
if(ret < 0)
cout << "递归 没有找到" << endl;
else
cout << "递归 二分查找:在array["<<ret<<"]里找到" << num << endl;
ret = BinarySearch_Iteration(array, 8, num);
if(ret < 0)
cout << "迭代 没有找到" << endl;
else
cout << "迭代 二分查找:在array["<<ret<<"]里找到" << num << endl;
return 0;
}
数据结构与算法_递归
最新推荐文章于 2021-01-22 23:43:20 发布