C语言常见推理题

#include <string.h>

// 1. 阶乘计算

int factorial(int n) {

if (n <= 1) return 1;

return n * factorial(n - 1);

}

// 2. 斐波那契数列

int fibonacci(int n) {

if (n <= 1) return n;

return fibonacci(n - 1) + fibonacci(n - 2);

}

// 3. 数组求和

int array_sum(int arr\[\], int n) {

if (n <= 0) return 0;

return arrn - 1 + array_sum(arr, n - 1);

}

// 4. 字符串反转

void reverse_string(char *str, int start, int end) {

if (start >= end) return;

char temp = strstart;

strstart = strend;

strend = temp;

reverse_string(str, start + 1, end - 1);

}

// 5. 十进制转二进制

void decimal_to_binary(int n) {

if (n > 1) decimal_to_binary(n / 2);

printf("%d", n % 2);

}

// 6. 汉诺塔问题

void hanoi(int n, char from, char to, char aux) {

if (n == 1) {

printf("移动盘子 1 从 %c 到 %c\n", from, to);

return;

}

hanoi(n - 1, from, aux, to);

printf("移动盘子 %d 从 %c 到 %c\n", n, from, to);

hanoi(n - 1, aux, to, from);

}

// 7. 判断回文字符串

int is_palindrome(char *str, int start, int end) {

if (start >= end) return 1;

if (strstart != strend) return 0;

return is_palindrome(str, start + 1, end - 1);

}

// 8. 最大公约数

int gcd(int a, int b) {

if (b == 0) return a;

return gcd(b, a % b);

}

// 9. 二分查找

int binary_search(int arr\[\], int left, int right, int target) {

if (left > right) return -1;

int mid = left + (right - left) / 2;

if (arrmid == target) return mid;

if (arrmid > target) return binary_search(arr, left, mid - 1, target);

return binary_search(arr, mid + 1, right, target);

}

int main() {

printf("=== C语言递归编程示例 ===\n\n");

// 测试阶乘

printf("1. 5的阶乘: %d\n", factorial(5));

// 测试斐波那契

printf("2. 第8个斐波那契数: %d\n", fibonacci(8));

// 测试数组求和

int arr\[\] = {1, 2, 3, 4, 5};

printf("3. 数组求和: %d\n", array_sum(arr, 5));

// 测试字符串反转

char str\[\] = "hello";

printf("4. 原字符串: %s\n", str);

reverse_string(str, 0, strlen(str) - 1);

printf(" 反转后: %s\n", str);

// 测试十进制转二进制

printf("5. 10的二进制: ");

decimal_to_binary(10);

printf("\n");

// 测试汉诺塔

printf("6. 3层汉诺塔解决方案:\n");

hanoi(3, 'A', 'C', 'B');

// 测试回文判断

char palindrome\[\] = "racecar";

printf("7. '%s' 是回文: %s\n", palindrome,

is_palindrome(palindrome, 0, strlen(palindrome) - 1) ? "是" : "否");

// 测试最大公约数

printf("8. GCD(48, 18): %d\n", gcd(48, 18));

// 测试二分查找

int sorted_arr\[\] = {1, 3, 5, 7, 9, 11, 13};

int target = 7;

int result = binary_search(sorted_arr, 0, 6, target);

printf("9. 在排序数组中查找 %d: %s\n", target,

result != -1 ? "找到" : "未找到");

return 0;

}

相关推荐
神仙别闹9 小时前
基于 C++ 实现两个有序链表序列的交集
java·c++·链表
swordbob10 小时前
ReentrantLock 与 AQS 完整学习手册
java·开发语言
政企项目老覃11 小时前
大模型幻觉治理与自动评测:金融风控场景的落地实践
人工智能·算法·机器学习
是隼人11 小时前
buuctf-pwn inndy_echo(32位fmt)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
淡海水11 小时前
08-03-不可变-ImmutableDictionary-TKey-TValue-与ImmutableHashSet-T-持久化哈希树
数据结构·算法·c#·哈希算法·dictionary·immutable
m0_5873830011 小时前
全民健身解决方案软件开发实战:从架构设计到落地指南
java·spring boot·spring·架构·需求分析
白山编程大哥11 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
hansang_IR11 小时前
【题解】[APIO2023] 赛博乐园 / cyberland
c++·算法·图论
洛阳纸贵12 小时前
MATLAB-matlab基础知识
学习·算法·matlab