1.用递归和非递归实现求第n个斐波那契数
非递归实现
1.创建一个一维数组,并定义第一个和第二个元素为1,。
2.然后其余元素为他之前的两个元素之和,从第三个元素开始一直计算到第n个数
3.如果n<3,那么直接返回1,当n>=3时,返回数组下标为n-1的元素
#include<stdio.h> #define N 100 int ASD(int *arr, int x) { int i = 2; if(x<3) { return 1; } while(i < x) { arr[i] = arr[i-1]+arr[i-2]; i++; } return arr[i-1]; } int main() { int a[N] = {1,1}; int n = 0; int c = 0; scanf("%d", &n); c = ASD(a,n); printf("%d", c); return 0; }
递归实现
#include<stdio.h> #include<stdlib.h> int Asd(int x) { if(x <= 2) { return 1; } else { return Asd(x-1)+Asd(x-2); } } int main() { int a = 0; int n = 0; scanf("%d", &n); a = Asd(n); printf("%d", a); system("pause"); return 0; }
2.用递归实现n 的k次方
#include<stdio.h> #include<stdlib.h> int Power(int n, int k) { if(k==1) return n; else return n*Power(n, k-1); } int main() { int x = 0; int y = 0; int z = 0; printf("请输入一个数\n"); scanf("%d", &x); printf("请输入这个数的次方数\n"); scanf("%d", &y); z = Power(x, y); printf("%d\n", z); system("pause"); return 0; }
3.递归计算一个非负整数的每一位相加之和,比如调用1234,输出为1+2+3+4=10
#include<stdlib.h> #include<stdio.h> int Sum(int n) { if(n == 0) return 0; else return n%10+Sum(n/10); } int main() { int x = 0; int y = 0; printf("请输入一个数\n"); scanf("%d", &x); y = Sum(x); printf("%d\n", y); system("pause"); return 0; }
4.递归实现将一个字符串反向排列(不能使用c库函数中的字符串操作函数)
#include<stdio.h> #include<stdlib.h> int n_strlen(char arr[])//计算字符串个数 { int i = 0; do { i++; }while(arr[i]); return i-1; } int gui(char *b) { if(*b == '\0') { return 0; } else { int c = n_strlen(b); char a = *b; *b = *(b+c); *(b+c) = '\0'; gui(b+1); *(b+c) = a; } return 0; } int main() { char a[] = "ASDFGHJK"; int s = strlen(a); gui(a); printf("%s", a); system("pause"); return 0; }
5.用递归和非递归实现strlen
递归实现
#include<stdlib.h> #include<stdio.h>
int My_strlen(char *a) { if(*a == '\0') return 0; return 1+My_strlen(a+1); } int main() { int i = 0; char a[] = "ASDFGHJK"; i = My_strlen(a); printf("%d\n", i); system("pause"); return 0; }
非递归实现
#include<stdlib.h> #include<stdio.h> int My_strlen(char *a) { int i = 0; while(a[i] != '\0') { i++; } return i; } int main() { int s = 0; char a[] = "ASDFGHJK"; s = My_strlen(a); printf("%d\n", s); system("pause"); return 0; }
6.递归和非递归实现n的阶乘
递归实现
#include<stdio.h> #include<stdlib.h> int C(int s) { if(1 == s) { return 1; } else { return s*C(s-1); } } int main() { int n = 0; int a = 0; printf("请输入一个数\n"); scanf("%d", &n); a = C(n); printf("%d的阶乘为%d", n, a); system("pause"); return 0; }
非递归实现
#include<stdio.h> #include<stdlib.h> int main() { int n = 0; int i = 0; int x = 1; printf("请输入一个数\n"); scanf("%d", &n); for(i = 1; i <= n; i++) { x = x*i; } printf("%d\n", x); system("pause"); return 0; }
7.递归的方式打印整数的每一位
#include<stdio.h> #include<stdlib.h> void A(int n) { if(n > 9) A(n/10); printf("%d ", n%10); } int main() { int x = 0; printf("请输入一个数\n"); scanf("%d", &x); A(x); system("pause"); return 0; }