再帰的な例

回文裁判官

等しくない場合、それははい、すべて等しく、出力回文である場合を押して、入力文字列を必要とし、その後、中間の開始と終了を決定し、出力は、ありませんが発生します。

出典:

#include <iostream>
using namespace std;
void Huiwen(int n,char str[],int m);
int main(){
	int i=0;
	char str[100];
	cin>>str;
	while(str[i]!='\0')
		i++;
	Huiwen(0,str,i-1);
	return 0;
}

void Huiwen(int n,char str[],int m){
	if(str[n]!=str[m]){
		cout<<"No"<<endl;
		return ;
	}
	else{
		if(n<m)
		Huiwen(n+1,str,m-1);
		else
			cout<<"Yes"<<endl;
	}

}

ファクターとの数

入力の数を求めることは、彼の数から1未満まで再帰和を係数し、元の数の大きさを比較し、それが等しいか否かが判定されます。

出典:

#include <iostream>
using namespace std;
int Sum(int n,int i);
int main(){
	int n;
	int x;
	cin>>n;
	x=Sum(n,n-1);
	if(n==x)
		cout<<"Yes"<<endl;
	else
		cout<<"No"<<endl;
	return 0;
}

int Sum(int n,int i){
	if(i>0){
	if(n%i==0)
		return Sum(n,i-1)+i;
	else
		return Sum(n,i-1);
	}
	else 
		return 0;
}

パワーセットコレクション

それぞれ同様のバイナリツリー状の所与のセット2つに再帰関数、2つの再帰的な溶液に設定された出力パワーの順序に従って入力セットに含まれる要素の数、。

出典:

#include <iostream>
#include <cstring>
using namespace std;
void Func(int i,char *Temp,int n);
char str[21];

int main()
{
	int n;
	char Temp[21]={0};
	cin>>n>>str;
	Func(0,Temp,n);
	return 0;
}

void Func(int i,char *Temp,int n)
{
	char reTemp[21]; 
	strcpy(reTemp,Temp);  
	if(i==n)
	{
		cout<<"("<<Temp<<")";
		return ;
	}
	else
	{
		Func(i+1,reTemp,n);
		strncat(reTemp,(str+i),1); 
		Func(i+1,reTemp,n);
	}
}

多項式

アルゴリズムの説明:
要求多項式、その結果、電力SUM1の現在の数で表される総合計を表すとともに、限り、行の最後の項目が最後のサイクルからのx、王Qianmian乗算されるように、係数の数の力を与えられています。注意:大きな配列を開くには、残業を避けるために、再帰デュアル循環を使用することはできません。

出典:

#include <iostream>
using namespace std;
int main(){
	int i;
	int n,x;
	int a[100001];//开一个大一点的数组
	int sum=0,sum1=1;
	cin>>n>>x;
	for(i=0;i<=n;i++){//存各项系数
		cin>>a[i];
	}
	for(i=n;i>=0;i--){//从最后循环,求出多项式的解
		sum+=a[i]*sum1;
		sum1=sum1*x;
	}
	cout<<sum<<endl;
	return 0;
}

スタック問題

アルゴリズムの説明:
すべての要素がスタックにプッシュされるまで、再帰的には、常にスタックを押してください。私たちは、要素、高度なスタックをプッシュする必要があり、その後、再帰的にスタックにそれらのすべてまで。すべての出力をポップするまで、出力されるように、最終的にスタックからそれらを得るためにそこにポップするスタック、これらの配列を押してください。

出典:

#include <iostream>
using namespace std;

int s[15];
int ss=0;
int a[15];
int length=0;

void push(int x){//进栈操作
	a[length++]=x;
}
int pop(){
	return a[--length];//出栈操作
}

void stack(int N[],int i,int in,int out){

	if(in==0&&out==0){//如果要进栈和要出栈的都没有输出栈内元素
		for(int j=0;j<i;j++){
			cout<<s[j];
		}
		cout<<endl;
	}

	else{

		if(in>0){//如果有要进栈的,进栈
			push(N[i]);
			stack(N,i+1,in-1,out);
			pop();
		}

		if(out>0&&out>in){//如果有要出栈的出栈
			s[ss++]=pop();
			stack(N,i,in,out-1);
			push(s[--ss]);
		}
	}
}

int main(){
	int n,i;
	cin>>n;
	int N[15];
	for(i=0;i<n;i++){//把1~n存到数组中,以便进出栈
		N[i]=i+1;
	}
	stack(N,0,n,n);
	return 0;
}

おすすめ

転載: blog.csdn.net/jihome/article/details/94962077