1.递归和非递归分别实现求第n个斐波那契数。
#include <stdio.h> #include <string.h> #include <stdlib.h> //利用递归实现佩波那契数列 //1 1 2 3 5 8... //n=(n-1)+(n+1) #define N 20//修改宏定义来修改数列的项数 int Fibonacci(int n){ if(n>2){ return Fibonacci(n-1)+Fibonacci(n-2); }else{ return 1; } } int main(int argc, const char * argv[]){ int i = 1; for(i=1;i<N;++i){ printf("%d\t",Fibonacci(i)); } system("pause"); return 0; }2.编写一个函数实现n^k,使用递归实现
//编写一个函数实现n^k,使用递归实现 #include <stdio.h> #include <string.h> #include <stdlib.h> int Power(int n,int k){ if(n==1){ return n; } if(k==0){ return 1; }else{ return n*Power(n, k-1); } } int main(int argc, const char * argv[]){ int n = 0; int k = 0; printf("请输入要求的数字的平方数:"); scanf("%d,%d",&n,&k); printf("%d",Power(n, k)); system("pause"); return 0; } 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和, 例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 //写一个递归函数,实现DigitSum(1974)转化为1+9+7+4 #include <stdio.h> #include <string.h> #include <stdlib.h> int DigitSum(int n){ if(n < 10){ return n; } else return n % 10 + DigitSum(n / 10); } int main(int argc, const char * argv[]){ int n ; scanf("%d",&n); printf("%d",DigitSum(n)); return 0; } 编写一个函数 reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。 //递归和非递归分别实现strlen #include <stdio.h> #include <string.h> #include <stdlib.h> //递归 int Mystrlen(char* string){ if(*string == '\0'){ return 0; } else return 1 + Mystrlen(++string); } int main(int argc, const char * argv[]){ char *ch1="abcdefg"; char ch2[10]={'a','b','c','d','e','f','g'}; printf("the strlen of ch1 is %d\n",Mystrlen(ch1)); printf("the strlen of ch2 is %d\n",Mystrlen(ch2)); } //非递归 #include<stdio.h> //指针方式 int my_strlen1(char *arr){ char *p = arr;//将数组首地址赋给指针p while(*p != '\0') { p++; //p++,指针最后指向arr中最后一个元素 } return p-arr; //最后一个元素减第一个元素,返回元素个数 }5.递归和非递归分别实现strlen
#include<stdio.h> void reverse_string(char *string) { if ('\0'!=*(++string)){ reverse_string(string);//递归调用,每次调用都要输出 } printf("%c",*(string-1)); } int main() { char *a = "abcdef"; reverse_string(a); printf("\n"); return 0; }6.递归和非递归分别实现求n的阶乘
#include<stdio.h> #include<stdlib.h> //递归 int Dn(int n) { if (n == 1){ return 1; } return n * Dn(n-1); } //非递归n int Fdn(int n) { int sum = 1; for(;n > 0;n--){ sum *= n; } return sum; } int main(){ int n = 5; printf("请输入n:"); scanf("%d", &n); int DS = 0; int FDS = 0; DS = Dn(n); FDS = Fdn(n); printf("递归结果:%d\n", DS); printf("非递归结果:%d\n", FDS); system("pause"); return 0; }7.递归方式实现打印一个整数的每一位
//#include<stdio.h> //#include<stdlib.h> 递归 //int Dn(int n) { // if (n == 1){ // return 1; // } // return n * Dn(n-1); //} 非递归n //int Fdn(int n) { // int sum = 1; // for(;n > 0;n--){ // sum *= n; // } // return sum; //} //int main(){ // int n = 5; // printf("请输入n:"); // scanf("%d", &n); // int DS = 0; // int FDS = 0; // DS = Dn(n); // FDS = Fdn(n); // printf("递归结果:%d\n", DS); // printf("非递归结果:%d\n", FDS); // // system("pause"); // return 0; //}