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;

}

相关推荐
阿屿37 分钟前
从零手搓 AI 伴侣(二):好感度通胀危机,与它的「货币政策」
java·人工智能
灿飞44 分钟前
Kotlin与Java虚拟机十一:类与属性:构造顺序、backing field 与显式 backing field
java·后端·kotlin
aiks_yuan1 小时前
40亿个QQ号 1G内存怎么去重:Java BitSet 装不下,long 数组位图 512MB 实测 46 秒(JDK 17)
java
文丑颜不良啊1 小时前
LeetCode2521~2540题目解析
java·leetcode
杨凯凡1 小时前
Spring Framework 7 HTTP Interface 实战:声明式 RestClient、超时与测试
java·spring·http
吴名氏.1 小时前
Java转AI Agent教程(第十二周)检索与切分
java·开发语言·人工智能·ai·ai agent
lisw052 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
瑞雪兆丰年兮2 小时前
JavaWeb-day10-SpringBootWeb案例
java·开发语言·javaweb·web
Rain的Java大神之路2 小时前
你背的Spring答案,全是5.x时代的:7.0.8源码一翻,80%的博客都过时了
java·后端·面试
一起学安全技术3 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer