相互递归分析 - Luhn算法

时间:2016-11-27 23:43:41

标签: c algorithm code-analysis mutual-recursion

  

Luhn算法

     

用于验证信用卡号

     
      
  1. 从最右边的数字,即校验位,向左移动,每秒数字的值加倍;如果该倍增操作的乘积大于9(例如,8×2 = 16),则将乘积的数字相加(例如,16:1 + 6 = 7,18:1 + 8 = 9)或者减去产品中的9(例如,16:16-9 = 7,18:18-9 = 9)。
  2.   
  3. 取所有数字的总和。
  4.   
  5. 如果总模数10等于0(如果总数以零结束)则该数字根据Luhn公式有效;否则它无效。
  6.   

实施

#include<stdlib.h>
#include<stdio.h>
#include<stddef.h>

int luhnSum(int);

typedef struct{
  int quotient;
  int remainder;
}Tuple;

Tuple* split(int number){
  /* Split positive number into all but its last digit and its last digit */

  Tuple *tuple = malloc(sizeof(Tuple));
  tuple->quotient = number / 10;
  tuple->remainder = number % 10;
  return tuple;
}

int sumDigits(int number){
  /* Return the sum of digits of positive number n */

  Tuple *tuple = NULL;
  if(number < 10){
    return number;
  }else{
    tuple = split(number);
    return sumDigits(tuple->quotient) + tuple->remainder;
  }
}


int luhnSumDouble(int number){

  Tuple *tuple = split(number);
  int luhnDigit = sumDigits(2*(tuple->remainder));

  if(number < 10){
    return luhnDigit;
  }else{
   return luhnSum(tuple->quotient + luhnDigit);
  }
}

int luhnSum(int number){

  Tuple *tuple = NULL;
  if(number < 10){
    return number;
  }else{
    tuple = split(number);
    return luhnSumDouble(tuple->quotient) + tuple->remainder;
  }
}

int main(void){

}

如何分析空间和空间相互递归代码的时间复杂度?

0 个答案:

没有答案