2017-10-16 4 views
2

이 튜토리얼 youtube tutorial을 사용해 보았습니다. 다음과 같이 나는 기능을 가지고 :kotlin에서 android tailrec 함수가 0을 반환합니다

fun fact(x:Int):Int{ 
    tailrec fun factTail(y:Int, z:Int):Int{ 
     return if(y == 0) { 
      z 
     } else { 
      factTail(y - 1, y * z) 
     } 
    } 
    return factTail(x,1) 
} 

을하고이 기능이 호출됩니다 한 OnCreate로 :

I/MainActivity: 5! = 0 

수있는 사람 지점 : 응용 프로그램의 출력은 다음과 같이 표시 로그인

var abc = fact(5) 
Log.i(TAG, "5! = $abc") 

여기서 무엇이 잘못되었는지.

+0

내가 제공 한 코드를 사용해 보았고'5! = 120'이다. – marstran

+0

동일. '5! = 120'이다. –

+0

Idem, 나는 5를 얻었다! = 120' kotlin REPL – crgarridos

답변

1

당신의 코드는 바로이며, 당신은 확실히 여러 결과 이상 MAX_SIZE 지능의 값을 0를 얻을. 그래서이 y를 *의 X 크로스 Int.MAX_VALUE = 2147483647은, 재미가 당신에게 0을 반환하는 경우

Int.MAX_VALUE 

: 당신과 지능의 최대 크기를 얻을 수 있습니다. 보다 큰 숫자의 경우 16 func은 0보다 작은 숫자를 반환하고 보다 큰 경우 을 반환합니다. 그래서 당신은 긴

fun fact(x : Long) : Long { 
    fun factTail(y : Long , z :Long):Long { 
     return if (y == 0L) z 
     else return factTail(y-1 ,y*z) 
     } 
     return factTail(x ,1) 
    } 

그러나 긴 또한 제한이에 지능에서 변수를 변경하여이 문제를 처리 할 수 ​​

for(x in 5..50){ 
    log.i("$x! : ${fact(x)}") 
    } 

: 당신은 이것을 확인할 수 있습니다. 희망을 얻으십시오.

관련 문제