You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用递归函数计算数字的持久性(Persistence)

实现数字持久性的递归方案

首先明确下数字持久性的定义:

将一个多位数的各位数字相乘,重复这个过程直到得到一位数,整个过程的循环次数就是该数字的持久性。举个例子,数字39的计算过程是:3×9=27 → 2×7=14 →1×4=4,一共经历3次相乘操作,所以它的持久性是3。

看了你给出的代码片段,目前只完成了主函数框架和递归函数的声明,还需要补全persistence函数的实现,以及完善主函数里的逻辑。下面是完整的可运行代码,用递归完美实现这个功能:

#include <stdio.h>

// 递归计算数字的乘法持久性
int persistence(int x) {
    // 递归终止条件:如果是一位数,不需要再计算,返回0
    if (x < 10) {
        return 0;
    }
    
    int product = 1;
    // 计算当前数字各位的乘积
    while (x > 0) {
        product *= x % 10;
        x /= 10;
    }
    
    // 递归调用:乘积的持久性 + 当前这一步的计数(1次相乘)
    return 1 + persistence(product);
}

int main() {
    int x;
    printf("Enter a number:\n");
    
    // 持续读取输入,直到用户输入非数字内容退出
    while (scanf("%d", &x) == 1) {
        // 简单输入校验:持久性仅针对正整数
        if (x <= 0) {
            printf("Please enter a positive integer.\n");
        } else {
            int result = persistence(x);
            printf("The multiplicative persistence is: %d\n", result);
        }
        printf("\nEnter another number (or enter non-digit to exit):\n");
    }
    
    return 0;
}

代码关键点说明:

  • 递归逻辑:persistence函数先判断当前数字是否为一位数,如果是则返回0(终止递归);否则计算各位数字的乘积,递归计算该乘积的持久性后加1(当前这次相乘算一次循环计数)。
  • 输入处理:主函数通过scanf的返回值判断输入有效性,同时加入非正整数校验,避免无效输入引发错误。
  • 测试示例:
    • 输入39,输出3
    • 输入999,计算过程为9×9×9=729 →7×2×9=126 →1×2×6=12 →1×2=2,共4次循环,输出4
    • 输入5(一位数),输出0

内容的提问来源于stack exchange,提问作者briduss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:26:08