关于递归的思考

全文就两句话:

递归步骤
// 1,明确函数功能: 既然是用递归重复某一个功能,那么首先你必须得了解 — 你写的函数到底是什么功能
// 2,定好尾头:尾找基线条件, 头找第一步与以后步骤的前后关系。中间过程全交给自己的函数(因此要明确自己的函数能干什么)

// 计算阶乘
// 1,明确函数功能:计算 n 的阶乘
// 2,定好尾头: 尾:0的阶乘为1   
//               头: 第一步是使用n去乘以(n-1)!, (n-1)!由求阶乘的fact(n-1)获得 (fact函数功能就是返回n 的阶乘)
int fact(int a) { 

	if (a == 0) return 1;
	return a * fact(a - 1); 

}


//辗转相除法求gcd
//1,明确函数功能:求出两个数的最大公约数
//2,定好尾头:尾:b为0时,a为gcd  
//             头:第一步与以后步骤为相等关系 return gcd(b, a%b)
int gcd(int a, int b) {
	if (b == 0) return a;
	return gcd(b, a % b);

}


// 递归中的减而治之思想
// 走台阶,n层台阶,走法有1次走1级和1次走2级,问求总共有几种走法
// 1,明确函数功能 : 返回确定阶梯数时特定的走法
// 2,定好尾头:尾:当楼梯只剩下1/2级时,走法确定1/2; 
//             头: 第1步走1级和第1步走2级 后各自的走法由自己的函数zou(t - 1) 和 zou (t - 2)求出(zou函数功能就是返回确定阶梯数时特定的走法)


int zou(int num) {
	if (num == 1) return 1;
	if (num == 2) return 2;
	return zou(num - 1) + zou(num - 2);

}


// 斐波那契数列
// 1,明确函数功能:返回斐波那契数列第n个值
// 2,定好尾头: 尾:feibo数列第一个数和第二个数为1
//				 头:第一步就是求n,求n就得有n-1,n-2.而n-1,n-2用自己的feibo(n-1),feibo(n-2)计算 (feibo函数功能就是返回斐波那契数列第n个值)
int feibo(int num) {
	if (num == 1) return 1;
	if (num == 2) return 2;
	return feibo(num - 1) + feibo(num - 2);

}


|| 分治思想 :分而治之

分类:
分而治之  --- 每次让问题规模减半  --- 归并排序
减而治之  --- 每次让问题规模减1   ---  求阶乘 求feibo
发布了24 篇原创文章 · 获赞 40 · 访问量 3944

猜你喜欢

转载自blog.csdn.net/a13352912632/article/details/104197273