1.递归实现n的k次方
编写一个函数实现n的k次方,使用递归实现。
n的k次方
比如2的3次方,就是2*2*2
我们可以拆成2* 2的2次方
这里我们就可以直到,n的k次方就是n* n的k-次方
另外,n的0次方=1
首先我们输入两个值
#include<stdio.h>
int main()
{
int n = 0;
int k = 0;
scanf("%d %d",&n,&k);
return 0;
}
然后我们定义一个函数,叫做Pow
把n,k传进去,放到ret里面,再把ret打印出来
#include<stdio.h>
int main()
{
int n = 0;
int k = 0;
scanf("%d %d",&n,&k);
int ret = Pow(n,k);
printf("%d\n",ret);
return 0;
}
当k=0时,n的0次方=1
当k>0时,n的k次方=n* k-1次方
当k<0时,比如2的-3次方就是2的3次方分之一
当k<0时会是小数这时候我们用int来接受就不太好
这时我们就要对ret的类型做修改,一同修改的还有printf的打印格式
#include<stdio.h>
int main()
{
int n = 0;
int k = 0;
double ret = 0.0;
scanf("%d %d",&n,&k);
ret = Pow(n,k);
printf("%lf\n",ret);
return 0;
}
这时候就可以编辑我们的函数Pow
先接受n和k,然后返回类型是double
#include<stdio.h>
double Pow(int n, int k)
{
}
int main()
{
int n = 0;
int k = 0;
double ret = 0.0;
scanf("%d %d",&n,&k);
ret = Pow(n,k);
printf("%lf\n",ret);
return 0;
}
函数的实现就可以按照之前的思路
当k=0时,n的0次方=1
当k>0时,n的k次方=n* k-1次方
当k<0时,比如2的-3次方就是2的3次方分之一
#include<stdio.h>
double Pow(int n, int k)
{
if (k == 0)
return 1.0;
else if (k > 0)
return n * Pow(n, k - 1);
else
return 1.0 / Pow(n, - k);
}
int main()
{
int n = 0;
int k = 0;
double ret = 0.0;
scanf("%d %d",&n,&k);
ret = Pow(n,k);
printf("%lf\n",ret);
return 0;
}
2.计算一个数的每位之和(递归实现)
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
首先我们输入一个数,再把他的函数和返回值写出来
#include<stdio.h>
int DigitSum(int n)
{
}
int main()
{
int n = 0;
scanf("%d",&n);
int sum = DigitSum(n);
printf("%d",sum);
return 0;
}
假设我们输入1234
在这个数字中,我们最好拿出来的就是4,我们直接1234%10=4
DigitSum(1234)
DigitSum(123)+1234%10
123就是1234/10得到的
DigitSum(12)+123%10+1234%10
12就是123/10得到的
DigitSum(1)=12%10+123%10+1234%10
1就是12/10得到的
当只剩下一位数时,我们就不用拆了,有了这个公式,我们就可以编辑函数了
#include<stdio.h>
int DigitSum(int n)
{
if (n > 9)
return DigitSum(n / 10) + n % 10;
else
return n;
}
int main()
{
int n = 0;
scanf("%d",&n);
int sum = DigitSum(n);
printf("%d",sum);
return 0;
}