递归(编程练习)

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;
}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值