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 arr[n - 1] + array_sum(arr, n - 1);

}

// 4. 字符串反转

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

if (start >= end) return;

char temp = str[start];

str[start] = str[end];

str[end] = 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 (str[start] != str[end]) 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 (arr[mid] == target) return mid;

if (arr[mid] > 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;

}

相关推荐
一 乐8 分钟前
酒店预订|基于springboot + vue酒店预订系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·酒店预订系统
Moe48824 分钟前
Spring AI Advisors:从链式增强到递归顾问
java·后端
敖正炀28 分钟前
ReentrantReadWriteLock、ReentrantLock、synchronized 对比
java
无限进步_36 分钟前
【C++】只出现一次的数字 II:位运算的三种解法深度解析
数据结构·c++·ide·windows·git·算法·leetcode
Takoony37 分钟前
GPU 推理并发的本质:从第一性原理到工程实践
算法·gru
网域小星球38 分钟前
C 语言从 0 入门(十七)|结构体指针 + 动态内存 + 文件综合实战
c语言·开发语言·文件操作·结构体指针·动态内存·综合项目
cike_y38 分钟前
Java反序列化漏洞-Shiro721流程分析
java·反序列化·shiro框架
极创信息1 小时前
信创系统认证服务怎么做?从适配到验收全流程指南
java·大数据·运维·tomcat·健康医疗
格鸰爱童话1 小时前
向AI学习项目技能(六)
java·人工智能·spring boot·python·学习
白宇横流学长1 小时前
停车场管理系统的设计与实现
java