算法:递归(2)

这是有关递归算法的第二篇,希望能对大家有点启示

目录

1.分离函数digit(n,k)

题目描述

输入

输出

样例输入 

样例输出 

 源代码

2.Hermite多项式

题目描述

输入

输出

样例输入 

样例输出 

 源代码

3.求f(x,n)

题目描述

输入

输出

样例输入 

样例输出 

 源代码

4. 再求f(x,n)

题目描述

输入

输出

样例输入 

样例输出 

 源代码


1.分离函数digit(n,k)

题目描述

在程序中定义一函数digit(n,k),它能分离出整数n从右边数第k个数字。

输入

正整数n和k。

输出

一个数字。

样例输入 
31859 3
样例输出 
8
 源代码
#include<stdio.h>
int digit(long n,long k)
{
    if(k!=1)
    return digit(n/10,k-1);//一位一位的移动
    else if(k==1)
    return n%10;//直到到第k位了,分离出来
}
int main()
{
    long n,k;
    scanf("%ld %ld",&n,&k);
    int a;
    a=digit(n,k);
    printf("%d",a);
    return 0;
}

2.Hermite多项式

这个题目远远没有它看起来那么难,最重要的是要看懂题目

题目描述

用递归的方法求Hermite多项式的值
 





对给定的x和正整数n,求多项式的值。

输入

给定的n和正整数x。

输出

多项式的值。

样例输入 
1 2
样例输出 
4.00
 源代码
#include<stdio.h>
int Hermite(int n,int x)
{
    if(n==0)
    {
        return 1;
    }
    else if(n==1)
    {
        return 2*x;
    }
    else if(n>1)
    {
        return 2*x*Hermite(n-1,x)-2*(n-1)*Hermite(n-2,x);//这个才是这个代码的灵魂所在
    }
}
int main()
{
    int n,x;
    scanf("%d %d",&n,&x);
    float a;
    a=(float)Hermite(n,x);
    printf("%.2f",a);//注意看题目要求要有两位小数点
    return 0;
}

3.求f(x,n)

这也是一道“纸老虎”,主要是看懂这个图从左到右怎么操作

题目描述

已知
 


求f(x,n)的值

输入

输入x和n。

输出

函数值,保留两位小数。

样例输入 
4.2 10
样例输出 
3.68
 源代码
#include<stdio.h>
#include<math.h>
float fx(float x,float n)
{
    if(n==1)
    {
        return sqrt(1+x);//到最里面层,开始返回
    }
	else 
    return sqrt(n+fx(x,n-1));//从左到右开始递推
}
int main()
{
    float x,n;
    scanf("%f %f",&x,&n);
    float a;
    a=fx(x,n);
    printf("%.2f",a);//注意保留两位小数
}

4. 再求f(x,n)

这题和上面一题非常像,只不过这个题是从上往下的递推

题目描述

已知

用递归函数求解。

输入

第一数是x的值,第二个数是n的值。

输出

函数值。

样例输入 
1 2
样例输出 
0.40
 源代码
#include<stdio.h>
float fx(float x,float n)
{
    if(n==1)
    {
        return x/(1+x);//到最下面了就开始返回
    }
    else 
    {
        return x/(n+fx(x,n-1));//根据题目来,慢慢往下推
    }
}
int main()
{
    float x,n;
    scanf("%f %f",&x,&n);
    float a;
    a=fx(x,n);
    printf("%.2f",a);//注意看题目要求
}

总结:

递归是在函数里面再调用这个函数,当你发现后面的操作都是一样的,你就可以开始考虑用递归,练题前先了解这个算法的根本,然后大胆的去刷题,你会发现题目也没有那么难,没有什么人一开始都会的,希望这两篇文章能对你有点帮助

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值