2019/11/19 定义函数+递归

定义函数:
1.划分代码到不同的函数中是由您来决定的,但在逻辑上,通常是根据每个函数执行一个特定的任务来进行的。
2.调用函数 函数名(参数值);
3.执行顺序:从main中开始,在main中结束
4.函数不能嵌套定义,可以嵌套使用
5.可以有多个return,也可以没有

#include<stdio.h>
double y(double x)
{
	//编写函数y时,可直接用return,记得要写return 
	return x*x+7*x-4;   
}
int main()
{
	//y(1.5)为函数调用 
	//将1.5赋给y函数中的x
	printf("x\ty\n%.2f\t%.2f\n",1.5,y(1.5));   
}

//求y(-10)-y(10)的值,步长为1 
#include<stdio.h>
double y(double x)
{
	//编写函数y时,可直接用return,记得要写return 
	return x*x+7*x-4;   
}
int main()
{
	//注意定义数的数据类型是int还是double 
	int i;
	printf("x\ty\n");
	for(i=-10;i<=10;i=i+1)
 	printf("%d\t%.2f\n",i,y(i));   
}

在这里插入图片描述

//
#include<stdio.h>
double y(double x)
{
	return (x+1)+(x+1);   
}
int main()
{
	double i;
	printf("x\ty\n");
	for(i=-1;i<=1;i=i+0.1)
 	printf("%.2f\t%.2f\n",i,y(i));   
}

在这里插入图片描述

//求1/1,1/(1+2),1/(1+2+3),1/(1+2+3+4)... 
#include<stdio.h>
//累加功能 
int y(double n)
{//记得在main中为n指定一个数,不然没有输出 
	int i,sum=0;
	for(i=1;i<=n;i++)
		sum+=i;
	return sum;	   
}
int main()
{
	double s=0;
	int i,n;
	scanf("%d",&n); 
	for(i=1;i<=n;i++)
		s+=1.0/y(i);
	printf("%.2f\n",s);   
}

在这里插入图片描述

#include<stdio.h>
//最大值功能 
int max(int x,int y)
{
	return x>y?x:y;	   
}
int main()
{
	int n1,n2,n3;
	n1=6;
	n2=8;
	n3=0;
	//max(int x,int y)和max(n3,max(n1,n2)的参数要对应 
	//先执行max(6,8) 
	//再执行max(0,8)) 
	//结果为8 
	printf("%d\n",max(n3,max(n1,n2)));   
}

在这里插入图片描述

//计算cos(x)的泰勒展开式 
//=1-x*x/2+x*x*x*x/4的阶乘+... 
#include<stdio.h>
double fact(int n)
{
	int i;
	double s=1;
	for(i=1;i<=n;i++)
		s*=i;
	return(s);	   
}
//计算x的n次方 
double xn(double x,int n)
{
	int i;
	double s=1;
	for(i=1;i<=n;i++)
		s*=x;//累乘x 
	return s;
}
double funcos(double x,double e)
{
	int flag=1,i=1;
	double s=0;
	double item;
	item=xn(x,0)/fact(0);//分子和分母结合 
	while(item>=e)//e为误差 
	{
		s+=flag*item;
		flag=-flag;//一正一负循环 
		item=xn(x,2*i)/fact(2*i);
		i++;	
	}
	return s;
}
int main()
{
	printf("%f\n",funcos(3.1415926,0.0000001));	   
}

在这里插入图片描述

#include<stdio.h>
//实现累加的功能 
int fact(int n)
{
	int i,sum=0;
	for(i=1;i<=n;i++)
		sum+=i;
		return sum;	
}
int main()
{//进入fact,将5传值给n,然后进行运算 
	printf("%d\n",fact(5));//结果为15 
}
/*用函数输出完数*/
#include<stdio.h>
int isPerfect(int n)
{
    int i,sum=0;
    for(i=1;i<n;i++)
    {//将所有因子相加 
        if(n%i==0)
        	sum+=i;
    }
    //如果数=所有因子相加,则返回1 
    if(sum==n)
	 return 1;
    else
    return 0;
}

int main()
{
    int n;
    int a,b;
    //输入判断的数从a到b 
    scanf("%d%d",&a,&b);
    for(n=a;n<=b;n++)
    {//调用函数 函数名(参数) 
       if(isPerfect(n))
        printf("%d\n",n);
    }
    return 0;
}
//递归-累加到5 
#include<stdio.h>
int f(int n)
{
	if(n==1)
		return 1;
	else
 		return n+f(n-1);
}
int main()
{//结果为15 
	int s;
	s=f(5);//n赋值为5 
	printf("%d\n",s);	   
}

递归小练习

例1
求f(5)的值:答案为8

#include<stdio.h>
int main()
{
	printf("%d",f(5));
}
int f(int k)
{
	if(k==0||k==1)
		return 1;//f(1)=f(0)=1
	else
	return f(k-1)+f(k-2);
} 

在这里插入图片描述
分析:先从要求的函数展开到x=1(已知),然后从最下层算到最上层。

例二
下列函数调用f(2,‘1’,‘2’,‘3’)的结果是 1->3#1->2#3->2#

void f(int n,char a,char b,char c)
{
	if(n==1)
		printf("%c->%c#",a,b);
	else
	{
		f(n-1,a,c,b);
		printf("%c->%c#",a,b);
		f(n-1,c,b,a);
	}		
} 

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值