数据结构与算法_递归

#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;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值