-
一.学到了1.数据类型 函数名(形式参数表)①函数的数据类型是函数的返回值类型,使用时要在前方事先声明,且结尾加";".ps:若函数类型为void,则无返回值。②在一个程序中的函数名,除了主函数名必须为main外,其余函数名可以任意选取,但必须用圆括号括起来。③形式参数可以为空,也可以多个,且用逗号隔开。形参必须有类型说明,形参可以是变量名,数组名或指针名,来实现主函数与被调函数之间的关系。ps:传引用方式:其内容为地址(储存位置)的变量。他所指向的地址存放的变量称为目标变量。(可以理解为就是目标变量,只是换了名字,如果其改变了,目标变量也会做出相应变动。)2.函数体 //执行语句ps:不允许在一个函数内定义另一个函数,函数间为平行关系,但可以嵌套使用。3.指针边量:其内容为它所指向地址上存放的变量。且一般定义的一般形式为:类型标识符 *变量名其即可以指向变量(一个指针变量只能指向同一类型的变量),也可以赋初值,但绝对不能对未赋值的指针变量做"取内容"运算。4.数组与指针①.在c++中规定,数组名就是数组的起始地址。例如: int a[10],*p;p=a;如同int *p=&a[0];ps:在c++中p+1指向数组的下一个元 素,而不是下一个字节。就如同*(p+1)与a[1]相同。但不可*++a=2,如此初始值就不再是a[0],而是a[1];如果用数组名做形参,因为接收到的是地址,所以就可以不指定具体元素的个数了。4.递归函数①直接或间接调用自身的函数称为递归函数。②他通常指一个大型复杂的问题层层转化为一个与原问题相似的规模大小的问题来求解。③递归的关键在于找出递归定义和递归终止条件。递归定义:使问题向边界条件转化的规则。递归定义必须使题越来越简单。递归终止条件:也就是所描述问题的最简单情况,他本身不再使用递归的定义。其中涉及到"集合的全排列问题","半数集问题","整数因子分解的算法"。二,例题①排列数组,顺序由小到大
#include <iostream>
#include<cstdio>
using namespace std;
void bubble(int a[],int n)
{
for(int i=1;i<n;++i)
{
for(int j=0;j<n-i;++j)
if(a[j]>a[j+1])
{
int temp=a[j];a[j]=a[j+1];a[j+1]=temp;
}
}
}
int main()
{
int x, a[10]={3,7,9,11,0,6,7,5,4,2};
bubble(a,10);
for (x=0;x<10;x++)
cout<<a[x]<<",";
cout<<endl;
return 0;
}②用递归进行因子分解,使因子相乘等于原数,且后一项比前一项大,得出符合该条件因子乘积的个数。
#include<iostream>
using namespace std;
int n,x;
int f(int a,int b){
if(a==1)return 1;
if(b==1)return 0;
if(a%b==0)return f(a/b,b)+f(a,b-1);
return f(a,b-1);
}
int main()
{
cin>>n;
while(n--)
{
cin>>x;
int res=f(x,x);
cout<<res<<endl;
}
return 0;
}三.学习心得
在编写程序中,我们要先想到这个函数要实现什么样的功能,怎么样的传值方式,怎样中止。函数就是在于把原先的复杂函数,转化成一个一个可以实现相应功能的小程序,去找到在复杂的函数中不容易发现错误,而在简单的程序中就显得麻烦。而我在最近的学习中,对于递归程序还没有很深入的了解进去,对于他所需的算法,都没有搞通,所以在练习七中寸步难行,在今后的学习中我要多做题,多看例题,加深对其了解程度,再形成自己的看法,去探索。
函数总结
最新推荐文章于 2022-11-18 18:09:09 发布