标签:count 12 java 递归 int --- factorial return
递归步骤:
1.首先分析基础步骤,也就是特殊情况,写出特殊情况
2.调用递归体进行相同的递归调用自身,把相同的大问题变换成小问题
问题1:
当n=0的时候返回1;当n>0的时候,n(n-1)。
相当于这种情况的时候我们可以调用递归体,代码如下:
int factorial(int n){
if(n==0){
return 1;
}else{
return n*factorial(n-1) //递归体
}
}
问题2:
1,1,2,3,5,8,12,x,x;利用递归
首先基础步骤n=1||n=2的时候都return 1
其它时候都是factorial(n-1)+factorial(n-2)
代码如下:
int factorial(int n){
if(n==1 || n==2){
return 1;
}
else{
return factorial(n-1)+factorial(n-2);
}
}
问题3:
计算x为底的n次幂,比如5的100幂
基础步骤
当n0的时候return 1,当n1的时候return x
主要步骤,分析递归过程
5^100
=5^50*5^50
=(5^25)*(5^25)*(5^25)*(5^25)
=(5^12*5^12*5)*(5^12*5^12*5)*(5^12*5^12*5)*(5^12*5^12*5*)
=(5^6*5^6*5^6*5^6*5)*(5^6*5^6*5^6*5^6*5)*(5^6*5^6*5^6*5^6*5)*(5^6*5^6*5^6*5^6*5)
=(5^3*5^3*5^3*5^3*5^3*5^3*5^3*5^3*5)*(5^3*5^3*5^3*5^3*5^3*5^3*5^3*5^3*5)*(5^3*5^3*5^3*5^3*5^3*5^3*5^3*5^3*5)*(5^3*5^3*5^3*5^3*5^3*5^3*5^3*5^3*5)
5^3=>5^2*5=>5*5*5
int power(int x,int n){
int y;
if(n==0){ //特殊情况
return 1;
}
else{
y=power(x,n/2); //调用递归体
y=y*y;
if(n%2==1){ //如果余数不为0,那么比如n=101,那么就是y=5^50*5^50*5
y=y*x;
}
}
return y;
}
问题4:
求一个数组的主元素
{7,3,2,1,3,3,1,3}
{7,7,7,3,3,7,2,5,2}
思路:
遇到第一个数7,开始计数1;
第二个数3,是不同的,计数器-1,把7和3去除
BOLL candidate(Type A[ ],Type &c,int n,int m){ //n为数组的长度,m每一次递归读取到的下标
int count=0;
int j=m;
c=A[m] //存储第一个数
while(j<n-1 && count>0){
j=j+1;
c=A[j];
if(A[j]=!c){ //比较两个数是否相等
count=count+1;
}else{
count=count-1;
}
}
if(j==n-1 && count>0){
return A[j]; //返回此时还剩的元素,很有可能为主元素
}else(j==n-1 && count==0){
return false; //都删除完了,没有主元素
}else(j<n-1){
return candidate(A,c,n,j+1) //调用递归体,当还没有读取完数据的时候
}
}
标签:count,12,java,递归,int,---,factorial,return 来源: https://www.cnblogs.com/xiaochaofang/p/14639244.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。