【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);
}
相关推荐
用户938515635071 小时前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法
To_OC2 小时前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法
饼干哥哥3 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
地平线开发者4 小时前
Transformer模型部署之性能优化指南
算法
地平线开发者5 小时前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月7 小时前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
小月土星8 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星8 小时前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试
To_OC1 天前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode