1.递归和非递归分别实现求第n个斐波那契数。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//int Fib(int n){
// if (n==1||n==2)
// {
// return 1;
// }
// else
// {
// return Fib(n - 1) + Fib(n - 2);
// }
//}
void Fib(int n){
int fib = 0;
int fib_1 = 1;
int fib_2 = 1;
if (n == 1||n == 2)
{
fib = 1;
}
for (int i = 3; i <= n;++i)
{
fib = fib_1 + fib_2;
fib_2 = fib_1;
fib_1 = fib;
}
printf("%d", fib);
}
int main(){
int n = 0;
printf("请输入n:\n");
scanf("%d", &n);
Fib(n);
//printf("%d\n", Fib(n));
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int zhishu(int n, int k)
{
if (k==1)
{
return n;
}
else if (k==0)
{
return 1;
}
else
{
return n*zhishu(n, k - 1);
}
}
int main(){
int n = 0;
int k = 0;
printf("请输入n,k:");
scanf("%d,%d", &n, &k);
printf("%d", zhishu(n, k));
system("pause");
return 0;
}
3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Digitsum(int n){
if (n<10)
{
return n%10;
}
return n % 10+Digitsum(n / 10);
}
int main(){
int n = 0;
printf("请输入n:");
scanf("%d", &n);
printf("%d\n", Digitsum(n));
system("pause");
return 0;
}
4. 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
#include <stdio.h>
#include <stdlib.h>
int strlen(char* str)
{
int len = 0;
while (1)
{
if (*(str+len)!='\0')
{
len++;
}
else
{
break;
}
}
return len;
}
void reverse_string(char str[])
{
if (*str)
{
char tmp;
int len = strlen(str);
tmp = str[0];
str[0]= str[len - 1];
str[len-1] = '\0';
reverse_string(str + 1);
str[len-1] = tmp;
}
}
int main(){
char str[] = "abcdef";
char* p = str;
reverse_string(str);
printf("%s\n",str);
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Strlen( char* str)
{
if (*str=='\0')
{
return 0;
}
return 1 + Strlen(str+1);
}
int main()
{
char* p = "";
char str = "";
p = &str;
printf("输入字符串:\n");
scanf("%s",&str);
printf("%d\n", Strlen(p));
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Strlen( char* str){
int num = 0;
if (*str=='\0')
{
return 0;
}
while (*str)
{
num += 1;
str += 1;
}
return num;
}
int main(){
char* p = "";
char str = "abcdef";
p = &str;
printf("请输入字符串:");
scanf("%s", &str);
int len = Strlen(p);
printf("%d\n",len);
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int jiecheng(int n){
if (n==1)
{
return 1;
}
return n*jiecheng(n - 1);
}
int main(){
int n=0;
printf("请输入n:");
scanf("%d", &n);
printf("%d\n", jiecheng(n));
system("pause");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int jiecheng(int n){
int sum = 1;
for (int i = 1; i <= n; i++)
{
sum = sum*i;
}
return sum;
}
int main(){
int n=0;
printf("请输入n:");
scanf("%d", &n);
printf("%d", jiecheng(n));
system("pause");
return 0;
}
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void print(n){
if (n > 9){
print(n / 10);
}
printf("%d\n", n % 10);
return 1;
}
int main(){
int n = 0;
printf("请输入n:");
scanf("%d", &n);
print(n);
system("pause");
return 0;
}