递归法

(1)母牛的数量   一只母牛没年初一生下一只小母牛,小母牛在4年以后生下一只小母牛。

#include<iostream>
using namespace std;
int getNum(int n){
	if (n <= 4){
		return n;
	}
	else{
		return getNum(n - 1) + getNum(n - 3);
	}
}
int main(){
	int n;
	cin >> n;//输出第n年的母牛的数量 递归公式为 if n<=4 f[n]=n  if  n>4 f[n]=f[n-1]+f[n-3]
	cout << getNum(n) << endl;
	system("pause");
	return 0;
}

(2)按顺序输出十进制数    通过递归,而不通过数组空间

#include<iostream>
using namespace std;
void print_num(int n){
	if (n < 10){
		cout << n << " ";
	}
	else{
		//递归调用
		print_num(n / 10);//递归调用返回到这里时在输出个位数字
		cout << n % 10 << " ";
	}
}
int main(){
	int n;
	cin >> n;
	print_num(n);
	system("pause");
	return 0;
}

(3)输出数组中的最大数

//求n个数中的最大值
#include<iostream>
using namespace std;
double getNum(double a[], int n){
	double maxNum;
	if (n == 1){
		return a[0];
	}
	else{
		maxNum = getNum(a, n - 1);
		if (maxNum < a[n - 1]){
			maxNum = a[n - 1];
		}
	}
	return maxNum;
}
int main(){
	int n;
	cin >> n;
	double a[105];
	for (int i = 0; i < n; i++){
		cin >> a[i];
	}
	double res = getNum(a, n);
	cout << res << endl;
	system("pause");
	return 0;
}

(4)计算x的n次幂

#include<iostream>
using namespace std;
const int MOD = 10000007;
long long power(int x, int n){
	long long res = 0;
	if (n == 0){
		return 1;
	}
	else{
		res = power(x, n / 2)*power(x, n / 2)%MOD;
		if (n % 2 == 1){
			res = res*x%MOD;
		}
	}
	return res%MOD;
}
int main(){
	int n, m;
	cin >> n >> m;
	long long res = power(n, m);
	cout << res << endl;
	system("pause");
	return 0;
}

(5)数组逆置

//将数组逆置
#include<iostream>
using namespace std;
void rev(int a[], int i, int j){//将i,j指针指向首尾
	int temp;
	if (i < j){
		temp = a[i];
		a[i] = a[j];
		a[j] = temp;
		rev(a, i + 1, j - 1);
	}
}
int main(){
	int n;
	cin >> n;
	int a[100];
	for (int i = 0; i < n; i++){
		cin >> a[i];
	}
	rev(a, 0, n - 1);
	for (int i = 0; i < n; i++){
		cout << a[i] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

(6)汉若塔

#include<iostream>
using namespace std;
int m;
void hanoi(int n, char A, char B, char C){
	if (n == 1){
		m++;
	}
	else{
		hanoi(n - 1, A, C, B);
		m++;
		hanoi(n - 1, B, A, C);
	}
}
int main(){
	int n;
	cin >> n;
	char A, B, C;
	m = 0;
	hanoi(n, 'A', 'B', 'C');//表示将n个盘子从A借助B移动到C
	cout << m << endl;
	system("pause");
	return 0;
}

  

 

posted @ 2020-10-17 22:13  goldstine  阅读(50)  评论(0)    收藏  举报