【递归】阶乘、全排列 、组合、二分查找

递归(recursion):程序调用自身的编程技巧。ios

  递归知足2个条件:编程

    1)有反复执行的过程(调用自身)数组

    2)有跳出反复执行过程的条件(递归出口)spa

最简单的例子是阶乘code

#include <iostream>
using namespace std;

//阶乘n! = n * (n-1) * (n-2) * ...* 1(n>0)

int recursive(int i)
{
	int sum = 0;
	if (0 == i)
		return (1);
	else
		sum = i * recursive(i-1);
	return sum;
}

int main(){
    int a=4;
    int result=recursive(a);
    cout<<a<<"的阶乘为"<<result<<endl;
}

全排列递归

从n个不一样元素中任取m(m≤n)个元素,按照必定的顺序排列起来,叫作从n个不一样元素中取出m个元素的一个排列。当m=n时全部的排列状况叫全排列。字符串

#include <stream>
using namespace std;
//全排列
inline void Swap(int &a,int &b)
{
	int temp=a;
	a=b;
	b=temp;
}
void Perm(int list[],int k,int m)
{
	if (k == m-1) 
	{
		for(int i=0;i<m;i++)
		{
			printf("%d",list[i]);
		}
		printf("n");
	}
	else
	{
		for(int i=k;i<m;i++)
		{
			Swap(list[k],list[i]); 
			Perm(list,k+1,m);
			Swap(list[k],list[i]); 
		}
	}
}
int main()
{
    int list[]={4,6,7};
    int len=3;
    for(i=0;i<len;i++){
        Perm(list,i,len);
    }
}

组合it

输入字符串,输出字符串全部组合io

#include <iostream>
#include <vector>

using namespace std;

void sets(char *data,int start,int end,int m, vector<char> &v)
{
    if( m <=0 || start>end ||end-start+1<m)
    {
        if(m ==0)
        {
            for(vector<char>::iterator it = v.begin();it<v.end();it++)
            {
                cout << *it;
            }
            cout << endl;
        }
        return;
    }
    else
    {
        v.push_back(data[start]);
        sets(data,start+1,end,m-1,v);
        v.pop_back();
        sets(data,start+1,end,m,v);
    }
}

int main(){
    char data[] = "abcd";
    vector<char> v;
    int len = strlen(data);
    for(int i = 1 ; i <= len ; ++i)
    {
        sets(data,0,len-1,i,v);
    }
    return 1;
}

二分查找递归class

在顺序数组中二分查找元素

#include <iostream>
using namespace std;

int findBi(int list[],int start,int end,int key){
        if(end < start)
                return -1;
        else{
                int mid=(start+end)/2;

                if(list[mid] == key){
                        return mid;
                }else if(list[mid] > key){
                        return findBi(list,start,mid-1,key);
                }else{
                        return findBi(list,mid+1,end,key);
                }
        }
}

int main(){
        int list[]={2,5,6,7,11,12};
        int key=4;
        int location=findBi(list,0,5,key);
        cout<<"findbi "<<key<<"in list:"<<location<<"."<<endl;
}
相关文章
相关标签/搜索