c递归小程序怎么写

时间:2025-01-29 03:53:27 单机游戏

递归小程序的核心在于定义一个函数,该函数在其定义中直接或间接地调用自身。递归程序通常会将一个大问题分解为更小、更简单的子问题,直到达到一个基本情况(基线条件),此时递归停止。下面是一些常见的递归小程序示例:

删除链表的最后一个节点

```c

include

include

typedef struct node {

int info;

struct node *link;

} Node, *Nodepointer;

void destroy_tail(Nodepointer node) {

if (node->link != NULL) {

destroy_tail(node->link);

} else {

free(node);

node = NULL;

}

}

int main() {

Node *head = (Node *)malloc(sizeof(Node));

head->info = 1;

head->link = NULL;

// 创建链表并调用 destroy_tail 删除最后一个节点

Node *current = head;

while (current->link != NULL) {

current = current->link;

}

destroy_tail(current);

return 0;

}

```

计算阶乘

```c

int fact(int x) {

if (x == 0 || x == 1) {

return 1;

} else {

return x * fact(x - 1);

}

}

int main() {

int num = 5;

printf("Factorial of %d is %d\n", num, fact(num));

return 0;

}

```

计算前N个自然数之和

```c

int sum(int N) {

if (N == 1) {

return 1;

} else {

return sum(N - 1) + N;

}

}

int main() {

int N = 5;

printf("Sum of first %d natural numbers is %d\n", N, sum(N));

return 0;

}

```

输出十进制转二进制

```c

void dec2bin(int n) {

if (n > 0) {

temp = n / 2;

t = (n % 2) ? '1' : '0';

dec2bin(temp);

putchar(t);

}

}

int main() {

int num = 10;

printf("Decimal %d in binary is: ", num);

dec2bin(num);

printf("\n");

return 0;

}

```

汉诺塔问题

```c

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

if (n > 0) {

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

printf("Move disk %d from %c to %c\n", n, from, to);

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

}

}

int main() {

int n = 3;

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

return 0;

}

```

这些示例展示了如何使用递归解决不同的问题。递归程序的关键在于正确定义基线条件,并确保每次递归调用都在向基线条件靠近。通过递归,可以将复杂问题分解为更简单的子问题,直到达到易于解决的基本情况。