函数递归**和AI对数学的影响
函数递归
1概念:函数在其内部调用自身的过程称为递归(递归必须依赖于函数实现)。这个概念可能有些抽象,下面通过一个具体例子来理解:
#include<stdio.h>voidPrint(intn){if(n>9){Print(n/10);// 递归调用自身}printf("%d",n%10);}intmain(){intn=0;scanf("%d",&n);Print(n);// 调用递归函数return0;}代码说明:
- 这是一个递归打印整数的示例
- 当输入的数字大于9时,函数会递归调用自身处理高位数字
- 每次递归调用处理数字的一位,从最高位到最低位依次打印
输入1234
第一步:进入第一个Print,得到123
第二部:123/10得到12
第三步;12/10得到1
结束递归,打印1
之后返回上一层,12%10=2 打印2
后面一样,打印3,4
最后1 2 3 4
注意:输入n的值没有变化,只是递归产生不同的执行层,Print往下顺,结束后printf往上顺(我也不知道咋讲的明白了)
2 递归的解释:大事化小,有点像数学的放缩,把问题化为一个最小的可解决问题,到这一步就可以停。
注意:如果递归错误,它会一直循环下去,最终出现栈溢出。
3例题
阶乘(以VS为例)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Fact(int n)
{ if (n==0) \阶乘无负数
return 1;
else
return n*Fact(n-1);
}
int main(){ int n=o;
scanf(“%d”,&n);
int ret=Fact(n);
printf(“%d”,ret);
return 0;
}
打印每一位数 开头的那一段 斐波那契数列 原理:前面两个的数的和等于第三个数 F(N=0)==0 F(N=1)==1 F(N)==F(N-1)+F(N-2)#include<stdio.h>
int Fib(int n)
{if (n0)
return 0;
else if (n1)
return 1;
else
rerturn Fib(n-1)+Fib(n-2);
}
int main()
{ int n=2;
scanf(“%d”,&n);
int n =ret;
ret= Fib(n);
printf(“%d”,ret);
return 0;
}
递归程序的影响:
1.关于程序性能分析的影响
以斐波那契数列为例,自己带个40进去算,要从n=40往回算,会带来大量的计算量。这样就会导致程序性能变差。
2.对栈溢出的影响
占用大量堆栈空间,导致栈溢出
联系内存那块知识(3个层那个)
为了提高效率,可考虑用循环代替递归
阶乘:#include<stdio.h>
int Fact(int n)
{ int i=o;
int ret=1;
for(i=1 ,i<=n ,i++)
{ ret=ret*i;
}
return ret;
}
注意:int n是整型的意思,5也是整型,所以不可以写Fact(n)
ret和return不一样,ret是反回值,像一个储存大脑,用来记阶乘,但return是指令,是把大脑里的数据送出去。
我们输入的是n
数据简单用递归,困难用循环
递归相当于翻译数学公式
插入AI对数学界的辅助作用
1.最基础的是验伪。假如全球人类数学水平下降100倍,无法证明斐波那契数列,但发现了规律,这时可以把数据喂给菜豆包,让它暴力试错,这时就会发现对于上亿个数来说,这个规律是正确的,那么在一定程度上可以认为这个假说是成立的(不过也有例外)
2数学推理辅助
通过把数学证明转化为计算机语言,通过符号语言逻辑推理验证
3 从AI运行本质出发,它无法解决像费马大定理这种那么庞大的问题。
