再帰:コア再帰的な方法を把握します

再帰的な私の理解という点である
メソッドまたは関数が再帰的に呼び出され、それ自体を呼び出す
に分け1:直接の質問+少量の
ように分類2.:小規模な問題
ここに画像を挿入説明
計算F(10)のために、あなたはF(9)を知っている必要があり、数F(9)F(8)を計算する必要が
あります:
1.それらのコール自体
2.無限ループを回避する
方法:
1.検索を繰り返す(下位問題は、より小規模(および元の問題の同じ形で)を見つける; Nの階乗- 、最初の....のn-1)の階乗を見つける
)は、n-1は、最初のパラメータとして階乗、....変化量を求め、n個の階乗を求めて、その物事2.取得チェンジ(変化を
見ている3境界(ループ終了条件が決定された出口であり、nの階乗を見つけ、1~1階乗、戻る、1時間、再帰的な階乗を見つけるために変更されている)
、N階乗シーク
最初のnの階乗を求めて、 n-1が求め階乗

#include<iostream>  
using namespace std;   

int f(int){
	int n;
	if(n==1)   //当n=1的时候,条件终止
	return 1;
	else 
	return n*f(n-1)   //求n-1的阶乘,再次缩小变为n-1*n-2,n就会越来越小
}   

第二に、印刷IJ

#include<iostream>
using namespace std;

static void f(int i,int j){    //i为变量,j作为终点不变
if(i>j)  //为出口;终止
return;
cout<<i<<endl;  //打印i
f(i+1,j);   //i+1越靠近j,离j越来越近
}  
int main(){
	f(1,10);  
}

第三には、アレイと発見
を繰り返して1検索重複し、小規模にARRは、第1分割のうちの、再帰的に残りはして
開始点を変更し、配列の変化の長さの変化2.外観、アレイの狭い範囲内で、不変の終了
それが配列の長さであり、境界を見つける3。

#include<iostream>
using namespace std;

static int f(int arr[],int begin ){  //begin初始数组
	if (begin==arr.length-1){
		return arr[begin];
	}
	return arr[begin]+f(arr,begin+1);   //
}
int main(){
	int res=f(new int[]{1,2,3,4,5},begin 0);
	cout<<res<<endl; 
} 

第四に、逆テキスト
反転になるDCBA ABCD後
ここに画像を挿入説明
ので最終的にはBスプライシング
変数:終了時間変化の先頭にエンドポイントとしての変化、

#include<iostream>
#include<cstring> 
#include<algorithm>
#include<vector>
using namespace std;

static String res(String src,int end){
	if(end==0)
	{
		return ""+src.charAt(0);
	}
	return src.charAt(end)+res(src,end-1);
}
int main(){
	cout<<res<<endl;
	cout<<(res("abcd",3))<<endl;;
}
公開された71元の記事 ウォンの賞賛4 ビュー10000 +

おすすめ

転載: blog.csdn.net/gl620321/article/details/104378881