重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
简单地说可以,一般除了无限递归等特殊的不行,其他的都可以。
10多年的建瓯网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整建瓯建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“建瓯网站设计”,“建瓯网站推广”以来,每个客户项目都认真落实执行。
一楼的不懂不要乱说。
C语言可以做的很精确,只要计算机的内存硬盘足够,就能足够精确,当然前提是极限存在。
如果需要很长很长的位数最好用数学函数库,因为一般80x87的精度都是80位,超过此限制需要自己用C语言或者汇编语言提高继续提高精度。但对于非专业计算机人士来说很难。
计算机就是做计算的,大部分可计算问题都没有问题,只是时间和空间的问题。
X趋于无穷大是不可能计算的,举一个简单的例子,假设计算机的内存1TB(目前还没有)。
如果存储了一个整数,那么这个最大值是2的8T次方,但是这个和无穷大相差太远。
考虑函数ackman(6,6),这个函数的值根本无法通过目前的计算机(甚至未来的计算机也不能计算出来),就算计算出来,这个数写出来一个地球也放不下,但是比无穷大小很多吧。
但是你说的问题就不一样,如果极限是收敛的,那么随着x的值增大,就可以取得那个极限的近似值。注意计算机C语言一般只能取得足够接近的值。
否则可以考虑使用公式推理软件,看看能不能解方程获得极限,那才可能是精确值。
比如说某个数列的极限为π,那要写一个相当复杂的程序才能打印出π字样。但是π的值又是什么呢?3.14159……,这个精确的值可能又是地球上不够写了。
这里给出C语言的阿克曼递归函数:首先,阿克曼函数标准定义:#include stdio.h
#include stdlib.hint Ackmann(int n,int m)
{
if(m==0)return n+1;
else if(m0 n==0)return Ackmann(m-1,1);
else return Ackmann(m-1,Ackmann(m,n-1));
}int main()
{
int m,n;
printf("输入m和n:");
scanf("%d,%d",m,n);
printf("结果是:%d",Ackmann(n,m));
system("pause");
return 0;
}
这个函数N年前就被证明是无递推公式的..orz,要解决这个,就用先用递归写看看。
long long ackman(long long m,long long n)
{
if(m==0 n=0)
return n+1;
else if(n==0 )
return ackman(m-1,1);
else if(m)
return ackman(m-1,ackman(m,n-1));
} //
在运行到m=4,n=1的时候,电脑都消耗了不少时间计算,得出的答案是65533.
#include"stdio.h"
int Ackerman(int n,int m)
{
if(n==1m==0)
return 2;
else if(n==0m=0)
return 1;
else if(n=2m==0)
return n + 2;
else if(n=1m=1)
return Ackerman(Ackerman(n - 1,m),m - 1);
}
int main()
{
int n,m;
scanf("%d%d",n,m);
printf("%d\n",Ackerman(n,m));
return 0;
}
这是最基本的递归用法的题目:我用3分钟编写如下:
并且调试成功。
#includestdio.h
int ack(int m,int n)
{
int x;
if(m==0n==1) x=2;
if(m==1n==0) x=2;
if(m0n0) x=ack(m-1,ack(m,n-1));
return x;
}
void main()
{
int m,n;
printf("Please input 2 int : m,n=");
scanf("%d%d",m,n);
printf("ack(m,n)=%d\n",ack(m,n));
}
#includestdio.h
#includestdlib.h
int fun(int m,int n)
{
if(m==0)
return n+1;
if(n==0)
return fun(m-1,1);
if(m0n0)
return fun(m-1,fun(m,n-1));
}
int main()
{
int a=2,b=1;
printf("%d\n",fun(a,b));
return 0;
}
递归其实不复杂,就是按条件写好就行了,记得终止条件不能少,否则会陷入无限循环。