【C/PTA —— 11.函数2(课外实践)】

C/PTA ------ 11.函数2(课外实践)

  • 一.函数题
    • [6-1 计算A[n]=1/(1 + A[n-1])](#6-1 计算A[n]=1/(1 + A[n-1]))
    • [6-2 递归实现顺序输出整数](#6-2 递归实现顺序输出整数)
    • [6-3 自然数的位数(递归版)](#6-3 自然数的位数(递归版))
    • [6-4 分治法求解金块问题](#6-4 分治法求解金块问题)
    • [6-5 汉诺塔](#6-5 汉诺塔)
    • [6-6 重复显示字符(递归版)](#6-6 重复显示字符(递归版))
    • [6-7 显示平行四边形(右)(递归版)](#6-7 显示平行四边形(右)(递归版))
  • 二.编程题
    • [7-2 N阶楼梯上楼问题](#7-2 N阶楼梯上楼问题)

一.函数题

6-1 计算A[n]=1/(1 + A[n-1])

c 复制代码
float fun(int n)
{
	if (n == 1)
		return 1;
	return 1 / (1 + fun(n - 1));
}

6-2 递归实现顺序输出整数

c 复制代码
void printdigits(int n)
{
    int count = 0;
    int num1 = 0;
    num1 = n;
    if (n == 0)
    {
        printf("0");
        return 0;
    }
        
    while (n)
    {
        n /= 10;
        count++;
    }
    int num[100] = { 0 };
    n = num1;
    int count1 = 0;
    while (n)
    {
        num[count1++] = n % 10;
        n /= 10;
    }
    for (int i = count1 - 1; i >= 0; i--)
    {
        printf("%d\n", num[i]);
    }
}

6-3 自然数的位数(递归版)

c 复制代码
int NumDigit(int number)
{
    if (number == 0)
        return 0;
    else if (number / 10 == 0)
        return 1;
    else
        return NumDigit(number / 10) + 1;
}

6-4 分治法求解金块问题

c 复制代码
int max(int a[], int m, int n) {
	int i;
	int max = a[0];
	for (i = m; i < n + 1; i++) {
		if (a[i] > max) {
			max = a[i];
		}
	}
	return max;
}

int min(int a[], int m, int n) {
	int i;
	int min = a[0];
	for (i = m; i < n + 1; i++) {
		if (a[i] < min) {
			min = a[i];
		}
	}
	return min;
}

6-5 汉诺塔

c 复制代码
void hanoi(int n, char from, char to, char by)
{
    void move(char x, char y);
    if (n == 1)
        move(from, to);
    else
    {
        hanoi(n - 1, from, by, to);
        move(from, to);
        hanoi(n - 1, by, to, from);
    }
}

void move(char x, char y)
{
    printf("%c->%c\n",x,y);
}

6-6 重复显示字符(递归版)

c 复制代码
void Show(int number, char symbol)
{
    void Print(char ch);
    if (number <= 0)
        return;
    if (number == 1)
        Print(symbol);
    else
    {
        Show(number - 1, symbol);
        Print(symbol);
    }
}

void Print(char ch)
{
    printf("%c", ch);
}

6-7 显示平行四边形(右)(递归版)

c 复制代码
void RtPara(int width, int height, char symbol)
{
    void PrintSpace(int number);
    if (width <= 0 || height <= 0)
        return;
    else
    {
        PrintSpace(height - 1);
        Show(width, symbol);
        putchar('\n');
        RtPara(width, height - 1, symbol);
    }
}

void PrintSpace(int number)
{
    if (number <= 0)
        return;
    else
    {
        printf(" ");
        PrintSpace(number - 1);
    }
}

二.编程题

7-2 N阶楼梯上楼问题

c 复制代码
int ClimbStairs(int number)
{
	if (number == 1)
		return 1;
	else if (number == 2)
		return 2;
	else
	{
		int dp[number+1];
		dp[1] = 1;
		dp[2] = 2;
		int i = 0;
		for (i = 3; i <= number; i++)
		{
			dp[i] = dp[i - 1] + dp[i - 2];
		}
		return dp[number];
	}
}

int main()
{
	int n = 0;
	int ways = 0;
	scanf("%d", &n);
	ways = ClimbStairs(n);
	printf("%d\n", ways);
}
相关推荐
CoovallyAIHub3 分钟前
IDEA研究院发布Rex-Omni:3B参数MLLM重塑目标检测,零样本性能超越DINO
深度学习·算法·计算机视觉
豐儀麟阁贵18 分钟前
4.4数组的基本操作
java·开发语言·数据结构·算法
无限进步_28 分钟前
【C语言】在矩阵中高效查找数字的算法解析
c语言·开发语言·数据结构·c++·其他·算法·矩阵
小白要加油努力40 分钟前
滑动窗口的典例以及思路阐述
算法
Yupureki1 小时前
从零开始的C++学习生活 11:二叉搜索树全面解析
c语言·数据结构·c++·学习·visual studio
草莓工作室1 小时前
数据结构2:线性表1-线性表类型及其特点
c语言·数据结构
啊森要自信1 小时前
【MySQL 数据库】MySQL用户管理
android·c语言·开发语言·数据库·mysql
小莞尔1 小时前
【51单片机】【protues仿真】基于51单片机火灾报警控制系统
c语言·单片机·嵌入式硬件·物联网·51单片机
CoovallyAIHub1 小时前
一夜之间,大模型处理长文本的难题被DeepSeek新模型彻底颠覆!
深度学习·算法·计算机视觉
天选之女wow1 小时前
【代码随想录算法训练营——Day43(Day42周日休息)】动态规划——300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
算法·leetcode·动态规划