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;

}

相关推荐
沪漂的码农2 小时前
C语言队列与链表结合应用完整指南
c语言·链表
m0_639817152 小时前
基于springboot纺织品企业财务管理系统【带源码和文档】
java·服务器·前端
q***31832 小时前
Spring Boot(快速上手)
java·spring boot·后端
q***09802 小时前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback
freedom_1024_2 小时前
LRU缓存淘汰算法详解与C++实现
c++·算法·缓存
博语小屋2 小时前
力扣11.盛水最多的容器(medium)
算法·leetcode·职场和发展
Swift社区2 小时前
LeetCode 423 - 从英文中重建数字
算法·leetcode·职场和发展
点云SLAM3 小时前
算法与数据结构之二叉树(Binary Tree)
数据结构·算法·二叉树·深度优先·广度优先·宽度优先
羊锦磊3 小时前
[ 项目开发 1.0 ] 新闻网站的开发流程和注意事项
java·数据库·spring boot·redis·spring·oracle·json