1-4函数与递归

函数传参:
传值,传指针,传引用.
每一种函数的相貌可能不同
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上面找一些题目.

发布了16 篇原创文章 · 获赞 0 · 访问量 236

猜你喜欢

转载自blog.csdn.net/weixin_44110100/article/details/104447415
1-4