Java解决角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
一、题目分析
2.角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
分析:假设一个数为n,定义一个cont来记录运算次数,若为偶数则n/2,若为奇数则n3+1;直到最后得出的数为1 次数则为count的值。
二、算法构造
用到的递归函数为judge(n),其中n表示所输入的数,结束递归的条件n==1,其中若n为奇数:则n=n3+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。相关推荐
- 角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 34 17 5 ...
- C++解角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。若输入自然数为1,则不需要运算,运算次数为1(用循环和递归分别实现)
角谷定理 题目描述 角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1. 现在请你编写C++程序求经过多少个数可得到自然数1.如: ...
- 角谷定理python每次输出数_角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。...
角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 34 17 5 ...
- java角谷_java实现递归设计——数鸭子和角谷定理
java实现递归设计--数鸭子和角谷定理 java实现递归设计--数鸭子和角谷定理 一 .题目分析 题目一:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只.这样他经过了七个村子后还 ...
- java角谷_Java:利用递归方法实现角谷定理
问题描述: 角谷定理.输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 3 ...
- java角谷_JAVA 角谷定理 递归
角谷定理.输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. 如:输入22, 输出 22 11 34 17 5 ...
- 赶鸭子;角谷定理;java实现
题目分析 目的: 掌握递归程序设计的方法.明确递归的概念,通过对问题的分析,找出递归关系以及递归出口以对问题进行递归结构设计: 掌握递归程序转换为非递归程序的方法. 要求: 用递归方法设计下列各题,并 ...
- 递归解决卖鸭子问题和验证角谷定理
实验内容: 用递归方法设计下列各题,并给出每道题目的递归出口(递归结束的条件)和递归表达式.同时考虑题目可否设计为非递归方法,如果可以,设计出非递归的算法. 1.一个人赶着鸭子去每个村庄卖,每经过一个 ...
- 角谷定理python输出变化过程_角谷定理。
角谷定理.输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1.经过如此有限次运算后,总可以得到自然数值1.求经过多少次可得到自然数1. (1) 问题分析: 首先判断输入的自然数是不是1 ...
最新文章
- hdfs 创建用户和用户组_hadoop四:linux用户和组命令
- python 填充多边形 学习笔记
- antd table设置表格一个单元格的字体颜色_微软Office三件套,各有一个效率神器,全都知道的人不超过1%...
- 调用API发送短信python
- 我们为什么要做 SoloPi
- android 释放bitmap fragment,,为什么重复Replace Fragment会内存泄漏
- linux mint 14 shurufa
- Etcd超全解:原理阐释及部署设置的最佳实践
- Hyper-V应用指南之5-导出、导入虚拟机
- 张鹏程:7月24日阿里云上海峰会弹性计算大神
- 戴尔服务器安装群晖系统安装教程,实战群晖NAS小白安装教程与经验分享
- springsoure.sts下载地址
- 【Python】利用tkinter开发AI对战井字棋游戏
- 免费天气预报API接口
- 惠普服务器开机无限重启,电脑开机无限重启的解决方法
- AT指令表(中文详解)
- ‘adb‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件—解决方法
- MySQL DBA的修炼与未来
- 英文论文在LATEX修改部分单词的颜色
- 肿瘤免疫新抗原鉴定(一)OptiType安装与运行
热门文章
- python模块,库
- 深聊测试开发之:从订单支付流程来聊一聊,如何预防重复支付,建议收藏。
- java毕业设计铝塑门窗的研制和生产管理源码+lw文档+mybatis+系统+mysql数据库+调试
- python3格式化输出
- SpringBoot整合Quartz之动态控制任务(暂停,启动,修改执行时间)
- Android 优惠券背景
- Dijkstra 路径规划算法原理详解及 Python 代码实现
- PTA评测系统的常见问题
- 【故事】P2P、BT、ED2k、FTP、磁力链接下载到底是什么鬼?
- can和could的用法_情态动词can和could用法详解