Tag: 递归

使用c语言中的递归进行合并排序

#include #include int arr[20]; void main() { int n,i; clrscr(); printf(“\n\t\t\t——Merge Sorting——\n\n”); printf(“Enter the size of array\n”); scanf(“%d”,&n); printf(“Enter the elements:\n”); for(i=0; i < n; i++) { scanf("%d",&arr[i]); } merge_sort(arr,0,n-1); printf("\n\n\t\t\t—–Merge Sorted Elements—–\n\n"); printf("Sorted array:\t"); for(i=0; i < n; i++) { printf("\t%d",arr[i]); } getch(); } int merge_sort(int arr[],int low,int high) { int mid; if(low < […]

字符串排列 – 这种回溯递归如何工作?

此函数基本上通过将字符与其所有其他字符交换来打印字符串的所有可能排列。 我理解前两次调用swap和permute。 但是为什么第二次调用掉掉了? 我无法理解这段代码。 有人可以解释一下这是如何工作的吗? /* Function to print permutations of string This function takes three parameters: 1. String 2. Starting index of the string 3. Ending index of the string. */ void permute(char *a, int l, int r) { int i; if (l == r) printf(“%s\n”, a); else { for (i = l; i […]

递归地添加数字序列

嘿我试图用一点递归刷新我的想法。 我想添加从“开始”到“结束”的所有数字。 即如果开始是1,结束是5.那么答案将是1 + 2 + 3 + 4 + 5 = 15 到目前为止,我已经有了这个 int calc(int start, int end){ if(start > end) return total; else{ total = total + start; return sum1(start++, end); } } 它不起作用(我得到seg故障)。 我究竟做错了什么? 编辑:对不起,我在我的实际代码中使用相同的变量,当我写这个我最终作为开始/结束,他们忘记改变所有代码。

有人可以解释一下这种类型的递归是如何工作的吗?

我在递归中遇到了这个问题。 我无法弄清楚它是如何工作的。 我理解递归的基础知识但这完全让我感到困惑。 请帮忙。 main() { foo(3); } void foo(int x) { if (x >= 1) { foo(–x); printf(“%d”, x); foo(–x); } } 我认为这个程序不打印任何东西,但它打印0120 。 是不是第一次调用foo( – 3)即foo(2)跳转到函数的开头并重复直到3递减到0? 请解释这是如何工作的。

C递归头文件包含问题?

假设您必须在2个头文件中定义相关结构,如下所示: 啊内容: #include bh typedef struct A { B *b; } A; bh内容: #include ah typedef struct B { A *a; } B; 在这种情况下,这种递归包含是一个问题,但是2个结构必须指向其他结构,如何实现呢?

仅使用堆区域的递归

是否只使用堆区域进行递归示例?

在C中递归地反转一个字符串?

我必须在递归函数中反转一个字符串,但我不能使用循环或strlen来查找字符串结尾的位置。 然后我必须将反转的字符串传递回main并将其复制到新文件。 这是我到目前为止所拥有的: int reverse(char *str, char *strnew, int p) { char temp=str[p]; if(temp==’\0′ || temp==’\n’) { strnew=str; return p; } else { reverse(str++, strnew, ++p); p–; strnew[p]=str[p]; printf(“strnew: %c\n”, strnew[p]); return 0; } } int main(int argc, char *argv[]) { FILE *fp; char buffer[100]; char newstr[100]; int pointer=0; fp=fopen(“lab8.txt”, “r”); if(fp==NULL) { printf(“Error opening […]

使用Fork的递归Fibonacci(在C中)

我正在尝试编写一个函数,该函数使用C中的forks从给定的int n递归计算得到的fibonacci数。 这是function规范:如果print为true,则打印它。 否则,将其提供给父进程。 解决方案应该是递归的,它必须为每个调用分叉一个新的子节点。 每个进程应该只调用一次doFib()。 方法签名无法更改。 无法使用辅助函数。 这是我到目前为止根据我对fork的理解所写的内容。 我试图分叉两次,所以我可以产生两个子进程。 一个做fib(n-1),一个做fib(n-2)。 这样我就可以抓住两个结果并将它们组合起来。 static void doFib(int n, int doPrint) { pid_t pid1; pid_t retpid1; int status1; pid_t pid2; pid_t retpid2; int status2; pid = fork(); if (pid == 0) // Child Process 1 { exit(100); // sends 100 to the parent } else if (pid > […]

如何使用C中的递归生成4位二进制组合0,1?

对于这个数组,尝试这样的事情: void rollover(int val,int count) { if(count==0) { return; } printf(“%d “,val); count–; rollover(val,count); } int main() { int arr[]={0,1}; for(int i=0;i<=1;i++) { rollover(arr[i],4); } printf("\n"); return 0; } 使用递归方法的预期输出: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 无法理解如何编写rec函数。 我花了几个小时来解决它。 有人可以协助编写该function吗? 我正在尝试做下面发布的G_G之类的事情。 我怎么能写这样的递归函数? 我是否必须使用一个for循环来调用递归函数,或者使用两个for循环来递归,还是应该调用两次递归函数? 例如: void rollover(int […]

C中的递归深度是否有任何硬连线限制

正在讨论的程序试图使用recursion来计算sum-of-first-n-natural-numbers 。 我知道这可以使用一个简单的公式n*(n+1)/2但这里的想法是使用recursion 。 该计划如下: #include unsigned long int add(unsigned long int n) { return (n == 0) ? 0 : n + add(n-1); } int main() { printf(“result : %lu \n”, add(1000000)); return 0; } 该程序在n = 100,000时运行良好,但当n的值增加到1,000,000 ,会导致Segmentation fault (core dumped) 以下内容取自gdb消息。 Program received signal SIGSEGV, Segmentation fault. 0x00000000004004cc in add (n=Cannot access […]