记录寒假自学的算法历程
*使用递归算法的三个条件
-
需要解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题完全相同。
-
递归调用的次数必须是有限的。
-
必须有结束递归的条件来终止递归。
递归算法简单讲就是在一个函数中反复调用自身函数
形式简单归纳如下:
#include<stdio.h>
int fun (int n){
if(n==条件1) return 常数;
else fun(n-1);
}
int main(){
int n;
fun(n);
}
但是需要注意的问题:n不是全局变量,因此不能在主函数中直接输出fun函数中n的计算值
如以下例题:求n!(n为正整数)的递归函数
#include<stdio.h>
int fun(int n){
if(n==1) return 1;
else return n*fun(n-1);
}
int main(){
int n;
scanf("%d",&n);
fun(n);
printf("%d",n);
}
运行结果:
两种解决办法:
1.在main中添加变量m=fun(n)
#include<stdio.h>
int fun(int n){
if(n==1) return 1;
else return n*fun(n-1);
}
int main(){
int n;
int m;
scanf("%d",&n);
m=fun(n);
printf("%d",m);
}
2.在输出时调用fan函数
#include<stdio.h>
int fun(int n)
{ if (n==1) return 1;
else
return fun(n-1)*n;
}
int main()
{int n;
scanf("%d", &n);
if(n==1)
printf("%d!=%d",n,1);
else
printf("%d!=%d",n,fun(n));
//n为main的局部变量
}