6.2-上机练习

这篇博客主要介绍了如何使用递归编程解决实际问题,包括实现阿克曼函数A(m, n),定义digit(n, k)函数获取整数的指定位置数字,递归计算Hermite多项式,并给出不同参数下的值,以及通过递归求解特定数学问题。内容涵盖了递归算法和数学应用。" 53407290,5682657,Windows核心编程:掌握Job对象管理进程,"['操作系统', 'Windows编程', '进程控制', '系统管理']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.阿克曼(Ackmann)函数A(m,n)中,m,n定义域是非负整数(m<=3,n<=10),函数值定义为:
akm(m,n) = n+1; (m=0时)
akm(m,n) = akm(m-1,1); (m>0,n=0时)
akm(m,n) = akm(m-1,akm(m, n-1)); (m,n>0时)

#include<iostream>
using namespace std;

int ack(int m,int n);

int main()
{
    int m,n;
    cin>>m>>n;
    cout<<ack(m,n)<<endl;
    return 0;
}

int ack(int m,int n)
{
    if(m==0)//判断是否到达递归边界m=0
        return (n+1);
    else if(n==0)//判断是否到达递归边界n=0
        return (ack(m-1,1));
    else//否则继续递归
        return (ack(m-1,ack(m,n-1)));
}

2.在程序中定义一函数digit(n,k),它能分离出整数n从右边数第k个数字,如digit(31859,3)=8,digit(2076,5)=0。

#include<iostream>
using namespace std;

int calculate(int n,int k);

int main()
{
    int n,k;
    cin>>n>>k;
    cout<<calculate(n,k)<<endl;
    return 0;
}

int calculate(int n,int k)
{
    k--;
    if(k==0)//判断是否到达递归边界k=0
        return n%10;
    else//否则继续递归
        return calculate(n/10,k);
}

3.用递归的方法求Hermite多项式的值
在这里插入图片描述
,对给定的x和正整数n,求多项式的值。并保留两位小数。

#include<iostream>
#include<cstdio>
using namespace std;

double calculate(int n,int x);

int main()
{
    int n,x;
    double result;
    cin>>n>>x;
    result=calculate(n,x);
    printf("%.2lf\n",result);
    return 0;
}

double calculate(int n,int x)
{
    if(n==0)//判断是否到达递归边界n=0
        return 1;
    else if(n==1)//判断是否到达递归边界n=1
        return 2*x;
    else//否则继续递归
        return ( 2*x*calculate(n-1,x)-2*(n-1)*calculate(n-2,x) );
}

4.已知 ,计算x=4.2,n=10以及x=2.5,n=15时的f的值。

 ,计算x=4.2,n=10以及x=2.5,n=15时的f的值。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

double calculate(double x,double n);

int main()
{
    double n,x;
    double result;
    cin>>x>>n;
    result=calculate(x,n);
    printf("%.2lf\n",result);
    return 0;
}

double calculate(double x,double n)
{
    if(n==1)//判断是否到达递归边界n=1
        return sqrt(1+x);
    else//否则继续递归
        return sqrt(n+calculate(x,n-1));
}

5.已知在这里插入图片描述
用递归函数求解。

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;

double calculate(double x,double n);

int main()
{
    double n,x;
    double result;
    cin>>x>>n;
    result=calculate(x,n);
    printf("%.2lf\n",result);
    return 0;
}

double calculate(double x,double n)
{
    if(n==1)//判断是否到达递归边界n=1
        return x/(1+x);
    else//否则继续递归
        return x/(n+calculate(x,n-1));
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值