ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

递归---java

2021-04-09 23:32:29  阅读:120  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有