您的位置:首页 > 其它

利用函数实现求第n个斐波那契数/实现n^k的计算/求取一个非负整数组成它的数字之和/将参数字符串的字符反向排列/实现strlen/n的阶乘/打印整数的每一位

2019-05-16 14:46 1041 查看

1.递归和非递归分别实现求第n个斐波那契数。

采用函数递归来实现,缺点就是效率很低,每次都要从头开始调用
例如:
//50
//49 48
//48 47 47 46

#include<stdlib.h>
#include<stdio.h>
//1 1 2 3 5 8 13  21 34 55......
int fib(int n)//利用递归函数求取
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
int main()
{
int n = 0;
int ret = 0;
printf("求第n个斐波那契数:\n");
scanf("%d", &n);
ret=fib(n);
printf("%d\n", ret);
system("pause");
return 0;
}

定义a,b,c,每次计算一位数,将a.b.c向后移动一位,避免重复计算

#include<stdlib.h>
#include<stdio.h>
//1 1 2 3 5 8 13 21 34 55
//a b c
int fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}

2.写一个函数实现n^k的计算

#include<stdlib.h>
#include<stdio.h>
int Index(int n, int k)
{
if (k == 1)
return n;
else
return n*Index(n, k - 1);
}
int main()
{
int n;
int k;
int ret;
printf("请分别输入数字n和指数k\n");
scanf_s("%d,%d", &n, &k);
ret= Index(n, k);
printf("ret=%d\n", ret);
system("pause");
return 0;
}
  1. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
    例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
#include<stdlib.h>
#include<stdio.h>
void DigitSum(int n,int* sum)
{
if (n > 9)
{
DigitSum(n / 10, sum);
}
*sum += n % 10;
}
//1729
//(172) 9
//(17) 2 9
//1 7 2 9
int main()
{
int num;
int sum=0;
printf("请输入一个非负整数:\n");
scanf("%d", &num);
DigitSum(num, &sum);
printf("%d", sum);
system("pause");
return 0;
}
  1. 编写一个函数 reverse_string(char * string)(递归实现)
    实现:将参数字符串中的字符反向排列。
    要求:不能使用C函数库中的字符串操作函数。
#include<stdlib.h>
#include<stdio.h>

void  reverse_string(char * string)
{
if (*(string) != '\0')
{
reverse_string(string + 1);
}
printf("%c", *(string-1));
}
int main()
{
char arr[] = "abcd";
reverse_string(arr);
printf("\n");
system("pause");
return 0;
}

5.递归和非递归分别实现strlen

#include<stdio.h>
#include<stdlib.h>
int Strlen(char* arr)//递归的方式实现
{
if (*(arr) != '\0')
{
return Strlen(++arr)+1;
}
return 0;
}
int len(char* arr)//非递归的方式
{
int count = 0;
while (*(arr + count) != '\0')
{
count++;
}
return count;
}
int main()
{
int ret;
char arr[] = "abcd";
ret=Strlen(arr);
printf("%d\n", ret);
ret = len(arr);
printf("%d\n", ret);
system("pause");
return 0;
}

6.递归和非递归分别实现求n的阶乘

#include<stdio.h>
#include<stdlib.h>
int Fac(int i)//用递归函数实现n的阶乘
{
if (i <= 1)
{
return 1;
}
return i*Fac(i - 1);
}
int fac(int i)//用非递归函数实现
{
int n = 1;
int ret = 1;
for (n = 1; n <= i; ++n)
{
ret = ret*n;
}
return ret;
}
int main()
{
int i;
printf("请输入想要所求数字n的阶乘:\n");
scanf("%d", &i);
Fac(i);
printf("%d\n", Fac(i));
fac(i);
printf("%d\n", fac(i));
system("pause");
return 0;
}

7.递归方式实现打印一个整数的每一位

#include<stdio.h>
#include<stdlib.h>
int Print(int n)
{
if (n > 9)
{
Print(n/10);
}
printf("%d ", n % 10);
}
int main()
{
int i;
printf("请输入一个整数:\n");
scanf_s("%d", &i);
Print(i);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐