1.注意事项
对于函数的参数压栈
从右往左进行压栈
C语言传参的方法
按值传递
按址传递
extern:引入外部变量的符号
extern “C” :引入外部C语言代码
数组指针:int (*p)[3]
指针数组:int *p [3]
函数指针:int (Pfun)(int,int)
指针函数: int * Pfun(int ,int);//返回int星类型
bass段的作用
函数返回值如何带出函数
int arr[]={1,2,3};
arr [1]=‘’星号(arr+1)
arr[1]//会奔溃原因是代表*(2),存在保留区域
2.变量
1.汉诺塔用递归实现
void Hanno(int n,char pos1,char pos2,char pos3)//pos1借助pos2移动到pos3
{
void Move(char x,char y);
if(n==1)
{
Move(pos1, pos3);
}
else
{
Hanno( n-1, pos1, pos3,pos2);//先将n-1个从pos1借助pos3移动到pos2
Move(pos1,pos3);//把剩下的一个从pos1移动到pos3
Hanno( n-1, pos2, pos1,pos3);//然后从pos2借助pos1移动到pos3
}
}
void Move(char x,char y)
{
printf("%c====>%c\n",x,y);
}
void move(char pos1,char pos2)//写法二
{
printf("%c==>%c\n",pos1,pos2);
}
void Hanno(int n,char pos1,char pos2,char pos3)
{
if(n == 1)
{
move(pos1,pos3);
}
else
{
Hanno(n-1,pos1,pos3,pos2);
move(pos1,pos3);
Hanno(n-1,pos2,pos1,pos3);
}
}
2.二分法用递归实现
int Binarserach(int *arr,int low,int len,int key)//前提是必须输入有序的数组
{
int mid=(low+len)>>1;//找到一半的位置
assert(low<len);
if(arr[mid]==key)//如果第一个就是的话返回这个数字
{
return arr[mid];
}
else if(arr[mid]>key)//mid>key在low到mid-1段继续查找
{
Binarserach(arr,low,mid-1,key);
}
else //if(arr[mid]<key)
{
Binarserach(arr,mid+1,len,key);//mid<key在mid+1到len段继续查找
}
return -1;
}
//方法二
int BinSearch(int *str,int p,int q,int key)//p为开始元素下标,q为最后的元素的下标,key为要查找的元素
{
//assert(*str != NULL);
if(p < q)
{
int mid = (q-p)/2 + p;
if(str[mid] == key)
{
return mid;
}
else if(str[mid] > key)
{
return BinSearch(str,p,mid-1,key);
}
else if(str[mid] < key)
{
return BinSearch(str,mid+1,q,key);
}
}
}
3.递归实现斐波那契
int Fibonacci(int n)
{
int tmp;
if(n == 1||n == 2)
{
tmp = 1;
return tmp;
}
else
{
tmp=Fibonacci(n-2)+Fibonacci(n-1);
//printf("%2d",tmp);
return tmp;
}
}