金山云笔试题:AKM函数
时间:2019-09-29
本文章向大家介绍金山云笔试题:AKM函数,主要包括金山云笔试题:AKM函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 题目描述
/** 阿克曼(Ackmann)函数 【题目描述】 阿克曼(Ackmann)函数A(m,n)中,m,n定义域是非负整数(m<=3,n<=10),函数值定义为: akm(m,n) = n+1; (m=0时) akm(m,n) = akm(m-1,1); (m>0,n=0时) akm(m,n) = akm(m-1,akm(m, n-1)); (m,n>0时) 【输入】输入m和n。 【输出】函数值。 【输入样例】2 3 【输出样例】9 */
写出递归与非递归算法,并输出调用过程。
2. 代码实现递归和非递归
import java.util.Stack; public class Main2 { public static void main( String[] args ) { System.out.println(AkmRecur(2, 3)); System.out.println(AkmNonRecur(2, 3)); } //递归 public static int AkmRecur(int m, int n) { if (m == 0) return n + 1; else if (n == 0) return AkmRecur(m - 1, 1); else return AkmRecur(m - 1, AkmRecur(m, n - 1)); } //非递归 public static int AkmNonRecur(int m, int n) { Stack<Integer> sx = new Stack<Integer>(); Stack<Integer> sy = new Stack<Integer>(); int x = 0; int y = 0; sx.push(m); sy.push(n); while ((!sx.empty()) && (!sy.empty())) { if (sx.peek() != 0 && sy.peek() == 0) { x = sx.peek(); y = sy.peek(); sx.pop(); sy.pop(); sx.push(x-1); sy.push(1); }else if (sx.peek() != 0 && sy.peek() != 0) { while (sx.peek()!= 0 &&sy.peek()!= 0) { x = sx.peek(); y = sy.peek()-1; sx.pop(); sy.pop(); sx.push(x-1); sy.push(-1); sx.push(x); sy.push(y); } } else { y = sy.peek(); sx.pop(); if (sx.empty()){ return y + 1; } else { sy.pop(); sy.pop(); sy.push(y+1); } } } return -1; } }
原文地址:https://www.cnblogs.com/haimishasha/p/11610405.html
- 洛谷P3835 【模板】可持久化平衡树
- 17.HTML
- 洛谷P2925 [USACO08DEC]干草出售Hay For Sale
- Numpy 修炼之道 (13)—— 将python函数向量化
- 洛谷P1887 乘积最大3
- 18.CSS
- R语言可视化——ggplot图表系统中的形状
- [机器学习Lesson 1 Introduction] 机器学习的动机与应用
- 洛谷P3377 【模板】左偏树(可并堆)
- Numpy 修炼之道 (12)—— genfromtxt函数
- 19.JavaScript
- 20.DOM
- 洛谷P3273 [SCOI2011]棘手的操作
- [机器学习Lesson 2]代价函数之线性回归算法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法