一、题目分析
2.角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。

分析:假设一个数为n,定义一个cont来记录运算次数,若为偶数则n/2,若为奇数则n3+1;直到最后得出的数为1 次数则为count的值。
二、算法构造
用到的递归函数为judge(n),其中n表示所输入的数,结束递归的条件n==1,其中若n为奇数:则n=n
3+1,再将所得到的n值传入到函数judge(n)中,从而形成递归,同理若n为偶数,则将n=n/2传入到judge(n)中。最后函数返回count,代表运算次数。
递归方法:

package recursion;
import java.util.Scanner;
public class Kakutani { static int count=1;public static int judge(int n){System.out.print(n+" ");if(1==n){System.out.println();return count;//最后得到数字1 返回次数}else{if(n%2==0){count++;return judge(n/2);//偶数}else{count++;return judge(n*3+1);//奇数}}}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();System.out.println("经过了"+judge(n) +"次");}
}

非递归方法:

public class Kakutani2 {public static int count=1;
public static int judge(int n) {while(1!=n) {if(0==n%2) {n=n/2;}else {n=n*3+1;}System.out.print(n+" ");count+=1;}return count;}
public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();System.out.println("经过了"+judge(n)+"次");test(n,count);
}

测试代码:

public static void test(int n,int count) {int counts=1;while(n!=1) {if(0==n%2) {counts++;n=n/2;}else {counts++;n=n*3+1;}}if(counts==count) {System.out.println("测试正确");}else {System.out.println("测试错误");}}}

运行结果:

Java解决角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。相关推荐

  1. 角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。

    角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 34 17 5 ...

  2. C++解角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。若输入自然数为1,则不需要运算,运算次数为1(用循环和递归分别实现)

    角谷定理 题目描述 角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1. 现在请你编写C++程序求经过多少个数可得到自然数1.如: ...

  3. 角谷定理python每次输出数_角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。...

    角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 34 17 5 ...

  4. java角谷_java实现递归设计——数鸭子和角谷定理

    java实现递归设计--数鸭子和角谷定理 java实现递归设计--数鸭子和角谷定理 一 .题目分析 题目一:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只.这样他经过了七个村子后还 ...

  5. java角谷_Java:利用递归方法实现角谷定理

    问题描述: 角谷定理.输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 3 ...

  6. java角谷_JAVA 角谷定理 递归

    角谷定理.输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 34 17 5 ...

  7. 赶鸭子;角谷定理;java实现

    题目分析 目的: 掌握递归程序设计的方法.明确递归的概念,通过对问题的分析,找出递归关系以及递归出口以对问题进行递归结构设计: 掌握递归程序转换为非递归程序的方法. 要求: 用递归方法设计下列各题,并 ...

  8. 递归解决卖鸭子问题和验证角谷定理

    实验内容: 用递归方法设计下列各题,并给出每道题目的递归出口(递归结束的条件)和递归表达式.同时考虑题目可否设计为非递归方法,如果可以,设计出非递归的算法. 1.一个人赶着鸭子去每个村庄卖,每经过一个 ...

  9. 角谷定理python输出变化过程_角谷定理。

    角谷定理.输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. (1) 问题分析: 首先判断输入的自然数是不是1 ...

最新文章

  1. hdfs 创建用户和用户组_hadoop四:linux用户和组命令
  2. python 填充多边形 学习笔记
  3. antd table设置表格一个单元格的字体颜色_微软Office三件套,各有一个效率神器,全都知道的人不超过1%...
  4. 调用API发送短信python
  5. 我们为什么要做 SoloPi
  6. android 释放bitmap fragment,,为什么重复Replace Fragment会内存泄漏
  7. linux mint 14 shurufa
  8. Etcd超全解:原理阐释及部署设置的最佳实践
  9. Hyper-V应用指南之5-导出、导入虚拟机
  10. 张鹏程:7月24日阿里云上海峰会弹性计算大神
  11. 戴尔服务器安装群晖系统安装教程,实战群晖NAS小白安装教程与经验分享
  12. springsoure.sts下载地址
  13. 【Python】利用tkinter开发AI对战井字棋游戏
  14. 免费天气预报API接口
  15. 惠普服务器开机无限重启,电脑开机无限重启的解决方法
  16. AT指令表(中文详解)
  17. ‘adb‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件—解决方法
  18. MySQL DBA的修炼与未来
  19. 英文论文在LATEX修改部分单词的颜色
  20. 肿瘤免疫新抗原鉴定(一)OptiType安装与运行

热门文章

  1. python模块,库
  2. 深聊测试开发之:从订单支付流程来聊一聊,如何预防重复支付,建议收藏。
  3. java毕业设计铝塑门窗的研制和生产管理源码+lw文档+mybatis+系统+mysql数据库+调试
  4. python3格式化输出
  5. SpringBoot整合Quartz之动态控制任务(暂停,启动,修改执行时间)
  6. Android 优惠券背景
  7. Dijkstra 路径规划算法原理详解及 Python 代码实现
  8. PTA评测系统的常见问题
  9. 【故事】P2P、BT、ED2k、FTP、磁力链接下载到底是什么鬼?
  10. can和could的用法_情态动词can和could用法详解