标签:
14、蛤蟆的数据结构笔记之十四栈的应用之栈与递归之阿克曼函数
本篇名言:“今天就是生命 ----- 是唯一你能确知的生命。”
继续递归应用,阿克曼函数。
欢迎转载,转载请标明出处:
阿克曼函数(Ackermann)是非原始递归函数的例子。它需要两个自然数作为输入值,输出一个自然数。它的输出值增长速度非常高,仅是对于(4,3)的输出已大得不能准确计算。
Ackermann函数定义如下:
若m=0,返回n+1。
若m>0且n=0,返回Ackermann(m-1,1)。
若m>0且n>0,返回Ackermann(m-1,Ackermann(m,n-1))。
1920年代后期,数学家大卫·希尔伯特的学生GabrielSudan和威廉·阿克曼,当时正研究计算的基础。Sudan发明了一个递归却非原始递归的Sudan函数。1928年,阿克曼又独立想出了另一个递归却非原始递归的函数。
他最初的念头是一个三个变数的函数A(m,n,p),使用康威链式箭号表示法是m→n→p。阿克曼证明了它是递归函数。希尔伯特在On the Infinite猜想这个函数不是原始递归。阿克曼在On Hilbert‘s Construction of the Real Numbers证明了这点。
后来Rozsa Peter和Raphael Robinson定义了一个类似的函数,但只用两个变数。
实现如下图1所示:
#include <stdio.h>
#include <stdlib.h>
int Ackmann(int m,int n)
{
if(m==0)
return n+1;
else if(m>0&& n==0)
returnAckmann(m-1,1);
else
returnAckmann(m-1,Ackmann(m,n-1));
}
int main()
{
intm,n,r;
printf("输入m和n:\n");
scanf("%d%d",&m,&n);
r =Ackmann(m,n);
printf("结果是:%d\n",r);
system("pause");
return0;
}
14、蛤蟆的数据结构笔记之十四栈的应用之栈与递归之阿克曼函数
标签:
原文地址:http://blog.csdn.net/notbaron/article/details/46611607