函数传参:
传值,传指针,传引用.
每一种函数的相貌可能不同
C/C++/JAVA还是比较相同的
其中有比较奇怪的函数.如果Lambda表达式
甚至还有一些奇怪的东东(注意sizeof不是函数)是一个运算符
函数的简单示例
#include <stdio.h>
#include <string.h>
int getMax(int* array,int length){
int MAX=array[0];
for(int i=1;i<length;i++){
if(MAX<array[i]){
MAX=array[i];
}
}
return MAX;
}
int main(){
int array[]={111,222,333,444};
//比如求最大的数:
int MAX;
//关键还是参数的问题。
//传入数组+数组的长度。但是注意数组名是仅仅是数组名
//真正意义上不是首地址
MAX=getMax(array,4);
printf("%d\n",MAX);
int max;
return 0;
}
关于函数的返回值的作用:
(1)返回"我要的东西"(函数运行结果)
(2)返回状态(函数成功与否)
结构化程序设计->C语言->通常是返回状态
当我们需要东西的时候,可以在函数外面定义一个变量.->将变量的指针传进去
面向对象程序设计->返回结果
如果越界->抛出异常->throw
//---------------------------------------------------------------------------------------------------
再看看递归:
讲递归函数的声明写完的时候,要相信函数能完成你的任务
讲两种递归:
一种是:伪递归(求阶乘,爬楼梯)
另一种是:真正的递归(汉诺塔)
写得时候先把框架搭建好:
#include <stdio.h>
int fact(int number){
}
int main(){
//求阶乘:
int n=4;
int result=fact(n);
printf("%d\n",result);
return 0;
}
接下来有内容补内容:
#include <stdio.h>
int fact(int number){
if(number==1||number==0) return number;
else return number*fact(number-1);
}
int main(){
//求阶乘:
int n=4;
int result=fact(n);
printf("%d\n",result);
return 0;
}
哈诺塔问题:
#include <stdio.h>
void hanoi(int n,char a,char b,char c){
if(n==1) printf("%c->%c\n",a,b);
else{
hanoi(n-1,a,c,b);
printf("%c->%c\n",a,b);
hanoi(n-1,c,b,a);
}
}
int main(){
int n;
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;
}
它的算法复杂度是2^n-1
其实递归的题目有很多很多,可以在pat上面找一些题目.