用c语言函数递归的方法求水仙花数。 您所在的位置:网站首页 编程水仙花数用函数 用c语言函数递归的方法求水仙花数。

用c语言函数递归的方法求水仙花数。

2024-06-26 15:21| 来源: 网络整理| 查看: 265

1前言

我们知道,函数的递归是一种极其巧妙的编程技巧,用对函数的递归,可以极大程度上提高代码的精简度。

该文章所指向的是水仙花数,水仙花数(Narcissistic number)是指一个n位数 (n≥3),它的每个位上的数字的n次幂之和等于它本身。例如153就是一个水仙花数,因为153=1^3+5^3+3^3。水仙花数是自恋数(Self number)的一种,是数字计算中的一种有趣现象

而在该文章中,我们抛开常见的用循环迭代的方式来找水仙花数,而运用了函数递归思想进行编程找出水仙花数。

2代码的实现 函数部分的设计

用递归算法可以实现求更大范围内的水仙花数。

我们分别向函数传了三个参数

i为数字本体,*p算的是该数字的位数,而*q指的是各位上的数字(此处为变量在函数递归中的含义)那么水仙花数的计算就可以把各个位上的*q和*p放入pow函数里进行计算然后求和得出。

注意,虽然该函数类型和数据类型是整型int,但是我们仅仅是求各个位上的数字,所以不需要考虑因类型导致的数据丢失的问题。最后我们用递归将各位的幂的和加起来。

主函数部分的设计

在for循环生成的数字中寻找匹配的项,如果是水仙花数就打印。

用count变量记录水仙花数的个数。

代码运行结果

这样我们的水仙花数就求好啦!

3备注

1.该函数使用到的变量都进行了传址调用,这是因为如果我们变量是传值调用的话,在出函数范围的的时候,该变量就会销毁,就不能达到改变对应变量值的目的,从而也就不能实现函数递归。而传址调用恰好解决了这一问题。让递归算法中的函数可以调用后一次函数中的变量。

2.求次幂我们运用到了pow函数,要包含对应的头文件。

3.该函数可以通过改for循环的范围实现对更大范围的水仙花数的展示。

下面是完整代码的呈现:

 

#include #include int narcissistic_number(int i, int* p, int* q) { if (i > 9) { (*p)++; *q = narcissistic_number(i / 10, p, q); } return *q + pow((i % 10), *p); } int main() { int i = 0; int j = 0; int count = 0; printf("该范围内的水仙花数有:"); for (i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有