想挑战自己吗?进来吧!“基础”啊
private int Acckermann(int x,int y)
{
if(y==0)
return y;
if(x==0)
return y=2*y;
if(y==1)
return y=2;
else
Acckermann(x-1,(Acckermann(x,y-1)));
}
求下面表达式的值:
Acckermann(1,10)
Acckermann(2,4)
Acckermann(3,3)
请各位给出下面函数的数学定义或解释:
private void f(int n){Acckermann(0,n)}
private void g(int n){Acckermann(1,n)}
private void h(int n){Acckermann(2,n)}
例如private void k(int n){5*n}计算的是5n。
凡最先给出正确的答案的前3位,可平分该分值,第一位可另得80分。
问题点数:120、回复次数:39Top
1 楼wengnet(西门吹雪)回复于 2005-12-30 14:21:43 得分 1
递归问题~!Top
2 楼shrinerain(圣影雨)回复于 2005-12-30 14:59:46 得分 10
0 (y=0)
2y (x=0,y!=0)
F(x,y)= 2 (x!=0,y=1)
F(x-1,F(x,y-1)) (x!=0,y!=1)
Top
3 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 15:13:37 得分 0
函数写得有问题
如果x=100,y=100...........Top
4 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 15:17:18 得分 0
另外
else
Acckermann(x-1,(Acckermann(x,y-1)));
缺一个return
else
return Acckermann(x-1,(Acckermann(x,y-1)));
Top
5 楼mark44404(杨雪)回复于 2005-12-30 15:32:12 得分 0
函数写得有问题
如果x=100,y=100...........
问题何在?
return的问题谢谢了。但重点不在那Top
6 楼abandonship(焚酒煮剑)回复于 2005-12-30 15:34:28 得分 0
……Top
7 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 15:42:35 得分 10
你测试一下就知道了
这个是你写的?还是面试题?
int得最大值是多少?
如果你自己知道这个函数是什么意思
你就会知道随便传两个数进去都会报错
比如2,5
这样的函数一般都必须用高精度算法
Top
8 楼mark44404(杨雪)回复于 2005-12-30 15:59:41 得分 0
上面题目中已经写了这叫Acckermann函数。
没有最大值。
Top
9 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 16:05:15 得分 10
private void f(int n){Acckermann(0,n)} 2n 大于int得最大值报错
private void g(int n){Acckermann(1,n)} 2得n次方(n>0)n为0时是0 n小于0会报错 大于int得最大值报错
private void h(int n){Acckermann(2,n)} n为0时是0 n小于0会报错 n大于4报错 2得Acckermann(2,n-1)得数的次方 本意好像是这个
不知道对不对
Top
10 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 16:11:34 得分 5
才注意到
原来是阿克曼函数
应该是Ackermann
多了个c没看清楚
Top
11 楼zeusvenus()回复于 2005-12-30 16:11:49 得分 0
又一个竞赛,不错!已置顶,希望兄弟们以后提出更有深度和难度的问题.Top
12 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 16:13:49 得分 0
唉
当初离散学得不好
Top
13 楼epaib(放下)回复于 2005-12-30 16:15:55 得分 0
我想问楼主这是什么问题????想知道结果就到程序执行一下还不可以吗???
不知道这个递归调用有什么意义??Top
14 楼epaib(放下)回复于 2005-12-30 16:23:30 得分 0
晕了.....知道了...Top
15 楼terry52(天天在线)回复于 2005-12-30 16:37:10 得分 40
Acckermann(1,10)=1024
Acckermann(2,4)=65536
Acckermann(3,3)=65536
我将它转为数学来做。
a(n,0)=0;
a(0,n)=2n;
a(n,1)=2;
a(0,n)=2n;
a(1,n)=2^n;
a(2,n)=2^a(2,n-1);等到n-1=1时结束。像a(2,4)=2^2^2^2,从右往左运算。Top
16 楼terry52(天天在线)回复于 2005-12-30 16:44:38 得分 0
后面的几个2的个数其实就是n的值。Top
17 楼mark44404(杨雪)回复于 2005-12-30 17:03:23 得分 0
to:terry52(天天在线)
从右往左运算
很正确的理解。
你注意到当a(x,n)x>2的时候的模型是怎样的吗?
Top
18 楼min_jie(止戈)回复于 2005-12-30 17:42:30 得分 0
标记。。看热闹。。Top
19 楼mark44404(杨雪)回复于 2005-12-30 20:36:28 得分 0
其实报错事因为数太大了。Top
20 楼monica_sh(桃之夭夭)回复于 2005-12-31 09:29:19 得分 0
yun yun de ,Top
21 楼desailly(Grad_BeLLeck)回复于 2005-12-31 09:39:42 得分 0
真有空Top
22 楼mooddecode1980(心情解码)回复于 2005-12-31 09:50:08 得分 0
:)
--Top
23 楼terry52(天天在线)回复于 2005-12-31 10:59:37 得分 10
a(m,n)=2^2=4 n=2;
a(m,0)=0;
a(0,n)=2n;
a(m,1)=2;
a(m,2)=4;
a(m,n)=2n; m=0
a(m,n)=2^n; m=1
a(m,n)=2^2...^2; m=2 2的个数为n的值
a(m,n)=2^2...^2 n>=m>=3 2的个数为m+n-2 (n>=m>=3) 运算都是从右往左
先想到了这么几个,看看是否正确。Top
24 楼jamesfay(狒狒)回复于 2005-12-31 15:22:09 得分 5
f: 2n
g: 2^n
h: ...Top
25 楼comerliang(天地良心)(性欲被自己倒分倒没了,以后再也不敢倒分了,想倒分的兄弟看看我的下场吧,男人没了性欲真不爽)回复于 2006-01-06 12:35:40 得分 0
学习Top
26 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-01-06 13:06:20 得分 5
先得做一个支持无限大数的结构才行。Top
27 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-01-06 13:55:47 得分 0
http://community.csdn.net/Expert/topic/4501/4501765.xml?temp=.9421045
悬赏编写支持超大整数类……Top
28 楼winterice(冬天的冰)回复于 2006-01-06 16:17:30 得分 2
mark!Top
29 楼mark44404(杨雪)回复于 2006-01-07 00:32:33 得分 0
Ivony() ( ) 你还跑来做广告!!!
无限大?A(5,3)就已经超过了宇宙量级了Top
30 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-01-07 10:03:34 得分 0
Ivony() ( ) 你还跑来做广告!!!
无限大?A(5,3)就已经超过了宇宙量级了
===========================
忽忽,有时间弄个无限大数类来算算。Top
31 楼tiaoci(我挑刺,我快乐)回复于 2006-01-07 10:46:46 得分 0
应当是
2^(2^....(2^y))
中间有 x 个 2^
Top
32 楼tiaoci(我挑刺,我快乐)回复于 2006-01-07 10:49:06 得分 0
哦,最后是 2*y,那么应当是
2^(2^....2^(2*y))
中间有 x 个 2^()
Top
33 楼tiaoci(我挑刺,我快乐)回复于 2006-01-07 10:51:28 得分 10
也就是A(5,3) = 2^(2^(2^(2^(2^(2*3)))))Top
34 楼blueskygenius(slash)回复于 2006-01-07 10:53:23 得分 2
晕,一头雾水Top
35 楼tiaoci(我挑刺,我快乐)回复于 2006-01-07 10:59:00 得分 0
晕,好像还不对,再看看Top
36 楼lostowner()回复于 2006-01-07 11:26:28 得分 0
学习Top
37 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-01-08 22:26:37 得分 10
刚刚花几分钟写了个支持超大整数的类,尽管只支持加法,还不支持负数,但是用来算这道题已经够了,谁有兴趣就拿去算算……
class XInt
{
private const int maxItem = 1000000000;
private List<int> _value;
public XInt( int i )
{
if ( i < 0 )
throw new NotSupportedException( "暂时不支持负数" );
_value = new List<int>( new int[] { 0, 0 } );
if ( i >= maxItem )
_value[1] = i / maxItem;
_value[0] = i % maxItem;
}
private XInt( List<int> value )
{
this._value = value;
}
/// <summary>
/// 重载加法运算符
/// </summary>
/// <param name="num1">第一个数</param>
/// <param name="num2">第二个数</param>
/// <returns>加法结果</returns>
public static XInt operator +( XInt num1, XInt num2 )
{
XInt resault = num1.Clone();
List<int> valueCollection = num2._value;
for ( int i = 0; i < valueCollection.Count; i++ )
resault.Add( valueCollection[i], i );
return resault;
}
/// <summary>
/// 从int的隐式类型转换
/// </summary>
/// <param name="intValue">int类型的数</param>
/// <returns></returns>
public static implicit operator XInt( int intValue )
{
return new XInt( intValue );
}
/// <summary>
/// 制作一份拷贝
/// </summary>
/// <returns></returns>
public XInt Clone()
{
List<int> cloneValue = new List<int>( _value );
return new XInt( cloneValue );
}
/// <summary>
/// 对指定数位执行加法运算(内部方法,直接修改数)
/// </summary>
/// <param name="intValue">值</param>
/// <param name="level">位</param>
private void Add( int intValue, int level )
{
while ( _value.Count <= level )
_value.Add( 0 );
long resault = (long) _value[level] + intValue;
if ( resault >= maxItem )
{
Add( (int) (resault / maxItem), level + 1 );
_value[level] = (int) (resault % maxItem);
}
else
_value[level] = (int) resault;
}
/// <summary>
/// 重载ToString方法将数值转换为字符串输出
/// </summary>
/// <returns></returns>
public override string ToString()
{
StringBuilder strBuider = new StringBuilder();
//这个标志标识是否已经生成首位。
bool flag = true;
for ( int i = _value.Count - 1; i >= 0; i-- )
{
if ( flag && _value[i] != 0 )
{
strBuider.Append( _value[i] );
flag = false;
}
else
strBuider.AppendFormat( "{0:000000000}", _value[i] );
}
return strBuider.ToString();
}
}
Top
38 楼lsfgis(飞鸟)回复于 2006-01-08 22:49:16 得分 0
顶了,学习中Top
39 楼mark44404(杨雪)回复于 2006-01-19 17:01:58 得分 0
真正目的没达到,还是给分八
Top




