#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *buffer;
/* kinder to stack */
const int range = 'a'+26;
int length = 0;
int spin(register char* p){
/* 26 == alphabet */
for(*p='a';*p<range;*p+=1){
printf("%s\n",buffer);
/*Recursion*/
if(p < buffer+length) /* one less call, same branches */
spin(p+1);
}
return 1;
}
/*
* ./recurse <num_chars>
* ./recurse 3
*/
int main(int argc, char ** argv) {
if(argc!=2) return argc;
int pass_length = atoi(argv[1]);
buffer = (char *) calloc(pass_length+1,sizeof(char));
buffer[pass_length]='\0';
memset(buffer,'a',pass_length);
/* This is a call to a recursive function */
length = pass_length-1;
spin(buffer);
return 0;
}
/*
old
-------------------------
real 0m49.464s
user 0m0.944s
sys 0m3.292s
-------------------------
new
-------------------------
real 0m10.825s
user 0m0.308s
sys 0m1.436s
-------------------------
*/