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

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

  • 一.函数题
    • [6-1 计算An=1/(1 + An-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 计算An=1/(1 + An-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);
}
相关推荐
stolentime10 分钟前
AT_arc182_a [ARC182A] Chmax Rush!题解
数据结构·c++·算法·动态规划
longlongzihan10 分钟前
LeetCode 189. 轮转数组:从直观模拟到最优原地算法
c++·算法·leetcode
爱喝热水的呀哈喽16 分钟前
cpp二分库函数 lambda捕获
算法
longlongzihan26 分钟前
LeetCode 76. 最小覆盖子串:滑动窗口算法详解
算法·leetcode·滑动窗口
怕浪猫9 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
yyy(十一月限定版)10 小时前
224redfg
c语言
无线通信科研笔记10 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_311 小时前
二叉树の递归遍历
算法
All for pursuit.11 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
小师兄吃牛肉12 小时前
C语言中的nullptr有必要吗
c语言·c++·算法