c中函数分为两种,一种是库函数也就是c语言自身函数库的函数。可以在引出头文件后直接使用。
另一种就是自定义函数,顾名思义就是用户自己定义的函数,用来实现某些特定的算法
函数的调用函数的调用较为简单
print_star(); //调用无参函数, c=max(a,b); //调用了有参函数
上图为函数的调用形式。其一般形式为:函数名(实参列表。如果实参列表包含多个实参,则个参数间用逗号隔开。例如:Solve_nu(arr[i],'x',5).
函数调用时的数据传递在调用有参函数时,主调用函数和被调用函数之间有数据传递关系。看代码
#include函数的递归int Solve_nu(int x,int y) //这里看定义的函数是否需要返回值,这里a,b是需要返回的。所以前面加上int。如果不需要返回直接就是void定义! { int z=(x>y?x:y); return(z); //这里z作为返回值给主函数! //以上完成对函数的定义,这只是一个最入门的。随便写写了反正也没人看 } int main() { int a,b; scanf("%d %d",&a,&b); //这里a,b为实际参数就是主函数在运行时使用的参数 int ret=Solve_nu(a,b) //这里实现对函数的调用,意思是把a,b这个实参送去函数加工厂。然后返回 printf("%d",a); return 0; }
在带调用一个函数的过程中又出现或间接出现了该函数,成为函数的递归调用,递归的基本思想都是建立在普通的函数之上,就是把大事化小的思维。
example:比如有5名学生,你问第5名学生多少岁,他说比第4名大两岁,而第4名又说比第3名大2岁,这样一直下去。但是这样一直下去是得不到结果的,只有他们5个中其中一个说出自己多少岁,为题就会解决。这里第一个学生就是传递的终点,然后一步一步再往会推可以推出第5名学生多少岁。这就是递归思想
int Solve(int y) { if (y < 0) return -1; else if (y == 0 || y == 1) return 1; else return (y * Solve(y - 1)); //走到这里函数回上面自己继续调用自己。 } int main() { int y = 0; scanf("%d", &y); int ret = Solve(y); printf("%dn", ret); return 0; }
int my_strlen(char*n) { if (*n != '') { return 1 + my_strlen(n + 1); // 因为这里数组元素的存放是递增存放的 } else { return 0; } } int main() { char arr1[10] = "abcdef";//数组名arr1是首元素的地址-char* int ch = my_strlen(arr1); printf("%d", ch); return 0; }
从这里可以看出元素存放的方式。
int fun(int n) { if (n <= 1) return 1; else return n * fun(n - 1); //递归的阶乘实现 } int main() { int i = 0; scanf("%d", &i); int ret = fun(i); printf("%d", ret); return 0; }
总之递归思想就是这样了.不太容易想的到,溜了溜了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)