c10函数的用法,递归函数

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;
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值