Tag: 递归

没有递归的遍历树和C中的堆栈

如何在没有C(无C ++)递归的情况下有效地遍历树的每个节点? 假设我有该树的以下节点结构: struct Node { struct Node* next; /* sibling node linked list */ struct Node* parent; /* parent of current node */ struct Node* child; /* first child node */ } 这不是功课。 我首先喜欢深度。 我不喜欢需要额外的数据结构(例如堆栈)。 我更喜欢速度方面最有效的方式(而不是空间)。 您可以更改或添加Node结构的成员来存储其他信息。

这两个地点有什么区别?

我有一个递归程序。 当printf用于该function时,它输出123,当在室外使用时,它输出0123。 #include fact(int); int main() { int x=3; fact(x); printf(“\n”); system(“PAUSE”); } int fact(int y) { if (y > 0) { fact(y-1); printf(“%d”,y); } //printf(“%d”,y); } 我没有同时使用printf 。 这个printf语句的位置有什么不同?

我无法理解函数的递归。 这个怎么运作? 如何存储值以及所有值?

我无法理解函数的递归。 这个怎么运作? 如何存储值以及所有值? int tree_size(struct node* node) { if (node==NULL) { return(0); } else { return(tree_size(node->left) + tree_size(node->right) + 1); } }

C递归函数不会返回true

我有一个搜索函数,它使用递归来执行数组的二进制搜索, values[] ,用于value : int recurseSearch(int value, int values[], int min, int max) { if (value > values[max] || min > max) return 1; int midpoint = (max+min)/2; if (values[midpoint] > value) //search in left recurseSearch(value, values, min, midpoint); else if (values[midpoint] < value) //search in right recurseSearch(value, values, midpoint, max); else if (values[midpoint] == […]

如何编写递归打印程序

大师, 我想知道如何编写打印的递归函数 1 12 123 1234 … …… 例如:display(4)应该打印 1 12 123 1234 码 #include void print(int n) { if(n != 0) { print(n-1); printf(“\n”); print(n-1); printf(“%d”,n); } } int main() { print(3); } 产量 1 12 1 123 问题 我想写一个纯递归 (没有任何循环)函数,但无法过滤不需要的打印。 希望有人能帮助我! 更新 谢谢大家的答案。从所有给出的评论看起来我们可以只用递归编写一个,并且需要一个循环。

递归函数找到素数因子

我做了一个递归函数来找到一个数字的素因子,但它有一个让turbo c退出的错误。 请帮忙 #include #include int prime(int num); int primefactor(int num,int i); void main(void) { int num; printf(“Enter a number whose prime factors are to be calculated:”); scanf(“%d”,&num); primefactor(num,i); i=num getch(); } int primefactor(int num,int i) { if(i==2) return 1; if(num%i==0) { if(prime(num)) { printf(“,%d”,num); num=num/i; i++; } } i–; primefactor(num,i); return 0; } int […]

C中的递归使非递归函数成为递归函数

gcd应该是一个递归函数。 它应该返回无效。 它应该采用两个正整数并将GCD放在第三个参数中。 这是我的编码gcdfunction。 但是,我意识到它不是一个递归函数。 我如何更改此代码以使其成为递归函数? void gcd(int *x, int *y) { int i; getValuesForGCD(x, y); for (i = *x; i >= 1; i–) { if (*x % i == 0 && *y % i == 0) { printf(“The GCD of %d and %d is %d”, *x, *y, i); break; } } }

C和printf中的递归函数

所以,首先我是C的初学者,我们正在大学学习“结构化编程”课程。 现在,关于“递归函数”的最后几个讲座对我来说是个初学者的痛苦。 你们中的任何人都可以这样解释我: 所以我有这个小脚本,一个递归函数,它接受十进制数并将其转换为二进制数: #include void binary(int num) { if (num == 0) return; binary(num / 2); printf(“%d”, num % 2); } int main() { int n; scanf(“%d”, &n); binary(n); return 0; } 现在我想知道,这个function如何运作? 我知道它背后的逻辑,它应该做什么,但我不知道它是如何做到的。 底部的printf特别让我失望,例如,如果printf函数在递归调用之前,输入十进制数10打印出来(0101),但如果它在它下面打印出正确的二进制数(1010)? 非常感谢任何forms的帮助,亲切的问候。

strlen函数在c中使用递归

我是kida对递归主题的新手,并且我一直在尝试使用recurion来编写“strlen”函数,这就是我尝试过的: int strlen ( char str[], int i) { if ( str[i] == 0) return i+1; return strlen(str,i++); } 我尝试了一些非常相似的东西 int strlen( char str[], int i) { if ( str[i] == 0) return 1; return strlen(str,i++) + 1; } 在我的主要function int main() { char word[MAX_DIGITS]; scanf(“%s”,word); printf(“%d”, strlen(word,0)); return 0; } 但是每当我运行它时我的程序都会崩溃,我错过了什么? (我用的是C90顺便说一句)

使用递归函数反转字符串

我目前正在学习C,我无法通过这项练习。 我必须创建一个递归函数来将string1反转为string2 。 这是我的代码。 我很乐意感谢你的帮助。 #include #define MAX 100 void reverse(char s1[],char s2[],int n,int j); int main() { char string1[MAX]=”How Are You Mate”; char string2[MAX]=””; int n=0; int i=0; int j=0; for(i=0;string1[i]!=’\0′;i++) n++; reverse(string1,string2,n,j); printf(“String-a normal:\n%s\n”,string1); printf(“String-a reverse:\n%s\n”,string2); return 0; } void reverse(char s1[],char s2[],int n,int j) { if(n>0) { s2[j]=s1[n]; reverse(s1,s2,n-1,j+1); } else s2[j]=’\0′; […]