递归法将一个数字倒置(如:12345→54321)代码不知道哪里出错了

public class Recursion {
public static int len(int n){
int j=0;
while(n>0)
{
j++;
n=n/10;
}
return j;
}
public static int f(int n,int k){
int i,t=n%10;
if(n<10)
{
k=n;
return k;
}
else{
for(i=0;i<len(n);i++){
k=k*10+t;
n=n/10;
t=n%10;
}
return k;
}
}
public static void main(String[] args) {
System.out.println(""+len(12345678));
System.out.println(""+f(12345678,0));

}
}

运行出来结果是
8
8765

想知道为什么????

你知道什么是递归么?你的程序根本就不是递归。

 /* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    static int mknum(int n)
    {
        if (n == 0) return 1;
        else return (int)Math.pow((double)10, (double)((int)Math.log10((double)n) - 0));
    }
    static int f(int n, int seed)
    {
        if (n == 0) return seed / 10;
        return f(n % mknum(n), n / mknum(n) * mknum(seed) * 10 + seed);
    }
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        System.out.println(f(12345678, 0));
    }
}

http://ideone.com/4nzQwc
在线运行
87654321

楼主,自己调用自己叫递归。。

 package cn.baokx;  

public class Test {  
    public static void main(String[] args) {  
        System.out.println(fun(12345678));  
    }  
    public static String fun(int num){  
        if(num>=10){  
            return (num%10)+fun(num/10);  
        }else{  
            return String.valueOf(num);  
        }  
    }  
}  

public static void main(String[] args) {
System.out.println(digui(12345678));
}

public static String digui(Integer t) {
    if (t < 10) {
        return t.toString();
    } else {
        Integer k = t % 10;//得到最后一个数
        t = t / 10;
        return k + digui(t);//每得到最后一个数,放在最前面,在调用方法
    }
}

for(i=0;i<len(n);i++){
k=k*10+t;
n=n/10;
t=n%10;
}

循环里改变了n的值,所以循环条件len(n);也就变了,可以先把长度取出来。
int nLen = len(n);
for(i=0;i<nLen;i++){
k=k*10+t;
n=n/10;
t=n%10;
}

这个题中的递归应该是
输出最后一个字符
生成一个去掉末尾字符的字符串,调用这个函数

void reverse(int n)
{

    if(n<10)
    {
        printf("%d",n); //若一位数,则直接输出 
    }
    else
    {
        printf("%d",n%10);  //多位数,先输出最后一位 
        reverse(n/10);      //除以10,并作递归. 
    }

}


int main()
{

    int n = 1234;
    printf("原来:%d \n",n);
    printf("翻转后: ");
    reverse(n);

    return 0;
}